0

在下面的方法中,向该方法发送消息的桌面应用程序被终止,并且在 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));
}
4

0 回答 0