Ich schreibe einen Server, der mit einigen eingebetteten Geräten kommunizieren soll. Das Kommunikationsprotokoll basiert auf einem Header fester Länge. Das Problem ist, dass ich meinen Server nicht dazu bringen kann, plötzliche Unterbrechungen der Geräte richtig zu handhaben (durch "plötzliche" Situationen, wenn ich das Gerät gerade ausschalte). Hier ist der Code für die Client-Thread Hauptschleife:Java-Socket-Server und eingebettetes Gerät - kann die Verbindung nicht richtig trennen
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
Auch wenn ich das Gerät ausschalten, die Lesemethode hält 0 Rückkehr nicht -1. Wie könnte das sein?