Java: предотвращение выброса EOFException сокетом DataInputStream - PullRequest
1 голос
/ 19 января 2011

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

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

Я думал о простой записисервер вроде этого ...

while socket is open {
    while at socket's DataInputStream's EOF {
        wait a second
    }
    //If we're here, then we have some data
    do stuff
}

... но это крайне уродливый и неправильный способ блокировать, пока не будут получены некоторые данные.

Есть ли более чистый способ сказатьсокет, чтобы заблокировать, пока есть некоторые данные для чтения?Я пробовал read () и readFully (), но ни одна из них не работает.

1 Ответ

2 голосов
/ 19 января 2011

Если вы получаете EOFException, это означает, что соединение разорвано.Вы не можете ждать соединения, которое закрыто.Продолжайте работать над своим клиентским кодом, чтобы он не закрывал соединение.На стороне сервера любой из методов чтения будет блокироваться, пока данные не будут доступны без дополнительных усилий с вашей стороны.

...