【发布时间】:2009-07-07 08:03:08
【问题描述】:
我正在编写一个应该与某些嵌入式设备通信的服务器。通信协议基于固定长度的报头。问题是我无法让我的服务器正确处理设备的突然断开连接(“突然”是指我刚刚关闭设备的情况)。下面是客户端线程主循环的代码:
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
即使我关闭了设备,读取方法仍然返回 0,而不是 -1。这怎么可能?
【问题讨论】: