0

以下のメソッドでは、このメソッドにメッセージを送信するデスクトップ アプリケーションが終了し、Eclipse コンソールでサーバーがまだ実行されていて、メソッドがループにスローされ、Eclipse コンソールがすぐにいっぱいになり始めました。

私はソケットプログラミングに非常に慣れていないので、おそらくばかげた質問であることを許してください。しかし、スタックトレースの503行目は、デスクトップアプリが終了したときにjava.io.EOFExceptionが発生したことを示していますが、以下のメソッドではキャッチelse { } 部分のステートメントがログ エラーのループを開始しました。これは継承されたコードであり、この種のエラーを最適に処理する方法については、実際に助けを求めることができます。任意の提案/指示をいただければ幸いです。ありがとう。

スタック トレースは次のとおりです。

警告 | チャネル-ソケット-1-ReceiveQueuer-0 | com.sharpbancsystems.channel.ActiveSocket | 503 |2013-10-01 08:04:22,406| - com.sharpbancsystems.channel.ActiveSocket.blockUntilGetMessageLength(ActiveSocket.java:498) の java.io.DataInputStream.readFully(DataInputStream.java:180) での java.io.EOFException com.sharpbancsystems.channel.ActiveSocket.blockUntilGetMessageBytes(ActiveSocket) 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