2012-05-04 1 views
0

実行可能ファイルを実装する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.を作成してみましたが、これは悪いことです。誰もが解決策を提案することができますか、またはどこに問題があるか(または両方!):)ありがとう。

+4

'Socket'を' Thread'で読み込もうとする前に 'Socket'を閉じると、例外が発生します。より多くのコードを投稿するか、問題の[SSCCE](http://sscce.org)を作成してみてください。また、例外のスタックトレース全体を示すことは役に立ちます。 – Jeffrey

+0

ソケットをリモートエンドに接続しましたか( 'accept'または' connect'経由)ですか? –

+0

@ジェフリー - あなたはおそらく頭の爪に当たったと思う、はい、サーバーで私はストリームを閉じ、学校の男の子のエラー。私はそれがトリックをやっていないとSSCCEで取られてメモを投稿します:) ビクター - クライアントの接続が受け入れられる(再び、私は次回にコードを投稿することを確認します) ありがとうあなたは両方。 –

答えて

1

Socketを閉じる前に、Threadに記載されていますので、例外が発生します。

+0

笑、ありがとう@ジェフリー –

関連する問題