在下面的方法中,终止向此方法发送消息的桌面应用程序已终止,并且在Eclipse控制台中,服务器仍处于运行状态,并且该方法被抛入LOOP,该循环开始很快填满Eclipse控制台。
我对套接字编程很新,所以请原谅可能是一个愚蠢的问题,但是在我的堆栈跟踪行503中说有一个java.io.EOFException,它发生在桌面应用程序终止但后面的方法中,else {}部分中的catch语句启动了一个记录错误循环。这是继承的代码,我真的可以使用一些帮助来解决这种类型的错误。任何建议/方向将不胜感激。感谢。
这是堆栈跟踪:
警告| Channel-Socket-1-ReceiveQueuer-0 | com.sharpbancsystems.channel.ActiveSocket | 503 | 2013-10-01 08:04:22,406 | - java.io.EOFException 在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.java: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));
}