在终止应用程序时,套接字将代码抛入循环

时间:2013-10-01 13:46:47

标签: java eclipse sockets

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

0 个答案:

没有答案