Я написал tcp сервер на Java. Он порождает рабочие экземпляры (Runnable) и прослушивает входящее tcp-соединение. При подключении от клиента он получает данные от клиента и выполняет свою собственную обработку.
В последнее время я заметил, что при отключении клиента происходит сбой всего сервера с ошибкой java.net.SocketException: сброс соединения при отключении или выходе клиента. Это было тогда, когда я понял, что не проверил tcp-сервер полностью на все случаи сбоя.
Я посмотрел код и заметил, что tcp-сервер потерпит крах в этой строке, пока ((bytesRead .... -1) в рабочем экземпляре
final int BUFFSIZE = 65535;
int bytesRead;
byte[] buffer = new byte[BUFFSIZE];
din = new BufferedInputStream(clientSocket.getInputStream());
while ((bytesRead = din.read(buffer)) != -1) { //tcp server crashes at this line if client quits or disconnects.
// worker does its job.
}
Я размышлял о том, как лучше закрыть рабочий экземпляр, не вызывая сбой на tcp-сервере. У меня нет доступа к исходному коду клиента, чтобы что-то изменить на его конце.
Есть мысли?
Bregs
Yakult121