重複の可能性:
java.net.SocketException: ソフトウェアが原因で接続が中止されました: recv に失敗しました
接続が終日有効で、クライアントがサーバーがメッセージを送信するのを待つクライアントサーバーペアを作成しようとしています。手順は次のとおりです。
- サーバーはポートを開き、接続をリッスンします
- クライアントが接続してデータを待つ
- しばらくしてから (おそらく数時間)、サーバーがクライアントにデータを送信します
- クライアントはデータを処理し、サーバーに返します
- 手順 3 と 4 を繰り返します
手順 1 ~ 4 は機能しますが、手順 3 を繰り返そうとすると、タイトルにエラーが表示されます。
これはクライアント側での私の方法です:
private static void waitForInput(SSLSocket sslsocket) throws IOException {
do {
try {
ObjectInputStream ois = new ObjectInputStream(sslsocket.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(sslsocket.getOutputStream());
Object o = (Object) (ois.readObject());
// excluded code to process data
oos.flush();
oos.writeObject(o);
oos.reset();
}
catch(ClassNotFoundException e){
System.err.println(e.getMessage());
}
} while ( true );
}
コードは 4 行目で失敗します。最初はブロックされ、データの次のビットを取得するまで待機しますが、2 回は機能しません。私は何を間違っていますか?