在下面的方法中,向该方法发送消息的桌面应用程序被终止,并且在 Eclipse 控制台中,服务器仍在运行,并且该方法被抛出一个循环,该循环开始很快填满 Eclipse 控制台。
我对套接字编程非常陌生,所以请原谅这可能是一个愚蠢的问题,但在我的堆栈跟踪行 503 中指出,当桌面应用程序终止时发生 java.io.EOFException 但在下面的方法中,catch else { } 部分中的语句启动了记录错误的循环。这是继承的代码,我真的可以使用一些帮助来最好地处理这种类型的错误。任何建议/方向将不胜感激。谢谢。
这是堆栈跟踪:
警告 | Channel-Socket-1-ReceiveQueuer-0 | com.sharpbancsystems.channel.ActiveSocket | 503 |2013-10-01 08:04:22,406| - java.io.EOFException at java.io.DataInputStream.readFully(DataInputStream.java:180) at com.sharpbancsystems.channel.ActiveSocket.blockUntilGetMessageLength(ActiveSocket.java:498) at com.sharpbancsystems.channel.ActiveSocket.blockUntilGetMessageBytes(ActiveSocket .java:456) 在 com.sharpbancsystems.channel.ActiveSocket.blockUntilReceiveMessage(ActiveSocket.java:268) 在 com.sharpbancsystems.channel.ReceiveQueuer.run(ReceiveQueuer.java:113) 在 java.lang.Thread.run(Thread.爪哇:662)
下面是方法代码:
protected int blockUntilGetMessageLength() {
final byte[] b = new byte[2];
try {
dataInputStream.readFully(b, 0, 2);
} catch (final IOException ex) {
if (this.shouldTerminate) {
return 0;
} else {
LOGGER.warn(FormatData.formatStack(ex));
synchronized (socket) {
socket.notify();
}
return 0;
}
}
LOGGER.trace("Received 2 bytes: " + new String(b));
return ((((b[0]) & BYTEMASK) << BYTESHIFT) | ((b[1]) & BYTEMASK));
}