一部の組み込みデバイスと通信するはずのサーバーを作成しています。通信プロトコルは固定長ヘッダに基づいている。問題は、サーバーを突然デバイスの突然の切断に適切に対応させることができないことです(「突然」とは、単にデバイスをオフにしたときの状況を意味します)。ここでは、クライアント・スレッドのメインループのコードは次のとおりです。javaソケットサーバーと組み込みデバイス - 接続が正しく処理されない
while(!terminate) {
try {
// Receive the header
while(totalBytesRead < ServerCommon.HEADER_SIZE) {
bytesRead = dis.read(headerBuffer, bytesRead, ServerCommon.HEADER_SIZE - bytesRead);
if(bytesRead == -1) {
// Can't get here!
}
else {
totalBytesRead += bytesRead;
}
}
totalBytesRead = 0;
bytesRead = 0;
type = Conversion.byteArrayToShortOrder(headerBuffer, 0);
length = Conversion.byteArrayToShortOrder(headerBuffer, 2);
// Receive the payload
while(totalBytesRead < length) {
bytesRead = dis.read(receiveBuffer, bytesRead, length - bytesRead);
if(bytesRead == -1) {
// Can't get here!
}
else {
totalBytesRead += bytesRead;
}
}
totalBytesRead = 0;
bytesRead = 0;
// Pass received frame to FrameDispatcher
私は、デバイスをオフにした場合でも、readメソッドは、0を返さない続け-1。これはどのようにすることができますか?