0

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.たが、これも同様に悪いようです。誰かが解決策、または問題がどこにあるか(または両方!)を提案できますか:)ありがとう。

4

1 に答える 1

1

Socketで読み込もうとする前に閉じてThreadいるため、例外が発生します。

于 2012-05-04T16:59:21.530 に答える