Лучший способ заблокировать сокет для данных - PullRequest
2 голосов
/ 25 июня 2010

Каков эффективный способ блокировки сокета для данных после его открытия. Я использовал метод для вызова чтения во входном потоке (это блокирующий вызов, который ожидает, пока некоторые данные будут записаны в этот сокет).

//Socket creation
SocketForCommunication = new Socket();
InetSocketAddress sAddr = new InetSocketAddress("hostName", 8800);
SocketForCommunication.connect(sAddr,10000);
is = new DataInputStream(SocketForCommunication.getInputStream());
os = new DataOutputStream(SocketForCommunication.getOutputStream());

//Waiting on socket using read method for data
while(true)
{
    int data = is.read();
    if(data == HEADER_START)
    {
        processPackage(is);
    }
}

Здесь проблема чтения может быть превышена по таймауту. Есть ли способ зарегистрировать обратный вызов, который вызывается, когда данные доступны для чтения в сокете .?

Ответы [ 2 ]

1 голос
/ 25 июня 2010

По умолчанию время ожидания сокета истекает, но вы можете изменить это, если действительно хотите. См. Вызов Socket.setSoTimeout () (нулевой тайм-аут означает «неопределенный»).

N.B. Даже если вы укажете нулевой тайм-аут, ваше O / S может или не может фактически позволить вам держать сокет открытым неопределенно долго. Например, незанятые сокеты могут закрываться через определенное время. В окружающей среде, например общедоступные среды веб-хостинга, не исключено, что домашняя программа также запускается (скажем) один раз в день и отключает незанятые сокеты.

И, конечно, вещи происходят в сетях. В любом случае, вы не должны полагаться на сокет, который остается открытым бесконечно ...

0 голосов
/ 25 июня 2010

Вы хотите использовать систему java.nio (не блокирующий ввод-вывод).Хотя он не управляется обратным вызовом, он обеспечивает гораздо большую гибкость при обработке ввода-вывода.

http://rox -xmlrpc.sourceforge.net / niotut / index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...