четверг, 24 декабря 2009 г.

Java - установка сокета с таймаутом

Представим, что вы пишете программу, которая бы открывала сокет на какой-либо порт и ждала бы от него ответа. Например, у вас есть список серверов, на каждый из которых надо зайти. И вдруг какой-то из серверов выходит из строя. Если не установить таймаут на создания сокета, то ваша программа будет висеть до тех пор, пока сервер не починят. Вот для этого случая и написан этот пост.
//Установка socket используя timeout
import java.net.*;
import java.io.*;
String AddAsStr="yandex.ru"
try {
AddrAsIAdr = AddrAsIAdr.getByName(AddrAsStr);//Переводим адрес из строки в тип InetAddress
} catch (Exception e) {
System.out.println("Could not resolve IP-address");
return 1;
};
try {
socket = new Socket();
socket.setSoTimeout(1000);
socket.connect(new InetSocketAddress(AddrAsIAdr,80),1000);//открываем сокет на сервере yandex.ru на порт 80 с таймаутом 1000 миллисекунд
} catch (Exception e) {
System.out.println("Could not establish socket");
return 1;
};

Вот и все:) В случае, если IP адрес не известен или socket не откроется за 1 секунду, программа выдаст соотвествующее сообщение.
P.s. подробнее про технологию сокетов в Java рекомендую читать на официальном сайте Java Sun.

4 комментария:

Анонимный комментирует...

Интересно написано....но многое остается непонятнымb

AlexWinner комментирует...

А что именно вам не понятно?) Я постараюсь объяснить..

Анонимный комментирует...
Этот комментарий был удален администратором блога.
Анонимный комментирует...

Очень познавательная статья получилась! Молодцом автор! :)