以下のメソッドでは、このメソッドにメッセージを送信するデスクトップ アプリケーションが終了し、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));
}