実行可能ファイルを実装する2つの 'クライアント'と 'ThreadManager'Javaは、実行可能なスレッドクラスにBufferedReader、DataOutputStream、およびSocketsを渡すことで、ストリームへの書き込み時にソケット例外が発生します。
2つのクライアントは、TCPを介してサーバーに接続し、プロトコルハンドシェイク/認証の作業(成功)に参加すると、既存のBufferedReader、DataOutputStreams、およびソケットを 'ThreadManager'に渡してClient1とClient2の間のスレッドメッセージを管理しようとしました。
SERVER:
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;
}
これはsucceを構築しますssfully、しかし、サーバーから呼び出さ.start()
に、デバッグが「ソケット例外:ソケットクローズ」を示しています。問題が作成される場所
outputStream.writeBytes("NUMBER: " + i + "\n");
私はわからないんだけど、う私を次のThreadManager内から呼び出されるとすぐにエラー接続を閉じて、ThreadManager内からソケットとストリームリーダー/ライターを再作成する必要がありますか?私はThreadManagerのコンストラクタでソケットを渡してみたところ、new BufferedReader... etc.
を作成してみましたが、これは悪いことです。誰もが解決策を提案することができますか、またはどこに問題があるか(または両方!):)ありがとう。
'Socket'を' Thread'で読み込もうとする前に 'Socket'を閉じると、例外が発生します。より多くのコードを投稿するか、問題の[SSCCE](http://sscce.org)を作成してみてください。また、例外のスタックトレース全体を示すことは役に立ちます。 – Jeffrey
ソケットをリモートエンドに接続しましたか( 'accept'または' connect'経由)ですか? –
@ジェフリー - あなたはおそらく頭の爪に当たったと思う、はい、サーバーで私はストリームを閉じ、学校の男の子のエラー。私はそれがトリックをやっていないとSSCCEで取られてメモを投稿します:) ビクター - クライアントの接続が受け入れられる(再び、私は次回にコードを投稿することを確認します) ありがとうあなたは両方。 –