2016-09-14 5 views
1

現在、マルチスレッドのJavaソケットサーバーを作成しようとしています。 私は「IDを使用して「プライベート」メッセージを送信することができます; MESSAGE;。私のクライアントにマルチスレッドのJavaサーバーを使用してクライアントIDを取得

をメッセージが右クライアントに到着するが、問題は、サーバーは、常にすべてのメッセージは、同じクライアント(クライアントID 0から来ることを表示するということです)、しかし、彼らにはありません。

は、ここに私のサーバーの http://pastebin.com/Dzh5Ynvj

あなたClientHandlerコードで

21:02:55 [DSS-Server] [Client#0] connected. 
21:02:58 [DSS-Server] [Client#1] connected. 
21:13:11 [DSS-Server] [Client#0] > 0;This is send from client 0 
21:13:18 [DSS-Server] [Client#0] > 1;This also 
21:13:30 [DSS-Server] [Client#0] > 0;But this comes from client 1 
+0

お客様のクライアントコードも掲載できますか?そして、サーバーはクライアントからどのようにメッセージを受信して​​いますか? – anacron

+0

私は情報の半分を忘れてしまった:/ここにクライアントハンドラがあるhttp://pastebin.com/z7bdX4sLそしてここでは基本的にクライアントhttp://pastebin.com/KwxkpGCW –

+0

@ AlonDattnerあなたのコンストラクタはその例外をキャッチすべきではありませんそれを投げるべきです。なんらかの理由で 'BufferedReader'を構築できない場合、Entureオブジェクトは役に立たないので、' new ClientHandler() 'の呼び出し元に返すことは無意味です。 – EJP

答えて

0

は、あなたが割り当てていないサーバーの出力210パラメーターをクラスのメンバーidに送信します。

public ClientHandler(Socket client, int id) { 
    this.id = id; // ADD THIS LINE 
    try { 

     //Get BufferedReader from client 
     this.client = client; 
     reader = new BufferedReader(new InputStreamReader(client.getInputStream())); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

は、あなたのClientHandlerコンストラクタでthis.id = id;を追加します。それはそれを行う必要があります。

+0

どのような初心者の間違い..ありがとう! –

関連する問題