2つの「クライアント」、1つの「サーバー」、および実行可能を実装する「ThreadManager」があります。
2つのクライアントはTCP経由でサーバーに接続し、プロトコルハンドシェイク/認証に参加し(成功)、既存のBufferedReaders、DataOutputStreams、およびSocketsを「ThreadManager」に渡してClient1とClient2間のスレッドメッセージを管理しようとしました。
サーバ:
ThreadManager tManager = new ThreadManager(serviceToClient1, inputStream, outputStream, serviceToClient2, inputStream2, outputStream2);
new Thread(tManager).start();
serviceToClient1.close();
serviceToClient2.close();
THREADMANAGER:
public ThreadManager(Socket cli1, BufferedReader inputStream, DataOutputStream outputStream, Socket cli2, BufferedReader inputStream2, DataOutputStream outputStream2)
{
this.cli1 = cli1;
this.inputStream = inputStream;
this.outputStream = outputStream;
this.cli2 = cli2;
this.inputStream2 = inputStream2;
this.outputStream2 = outputStream2;
}
これは正常に構築さ.start()
れますが、サーバーから呼び出されると、ThreadManager内から次のコマンドが呼び出されるとすぐに、デバッグで「ソケット例外:ソケットが閉じられました」エラーが表示されます。
outputStream.writeBytes("NUMBER: " + i + "\n");
問題がどこで発生するかわかりません。接続を閉じて、ThreadManager内からソケットとストリームリーダー/ライターを再作成する必要がありますか?ThreadManagerコンストラクターでSocketsを渡してから作成しようとしましnew BufferedReader... etc.
たが、これも同様に悪いようです。誰かが解決策、または問題がどこにあるか(または両方!)を提案できますか:)ありがとう。