2016-04-29 5 views
0

私のスレッドクラスには、Serverに情報を送るセクションがあります。 、ソケットからスレッドをサーバーに送るにはどうすればいいですか

ServerSocket s1 = new ServerSocket(portNumber); 
    System.out.println("Listening");*/ 

    ArrayList<Socket> sockets_list = new ArrayList<Socket>(); 
    ArrayList<Scanner> scanners_list = new ArrayList<Scanner>(); 
    for (int i = 0; i < Thread_Count; i++) { 
     Socket news = s1.accept(); 
     sockets_list.add(news); 
     Scanner newSc = new Scanner(sockets_list.get(i).getInputStream()); 
     scanners_list.add(newSc); 
     System.out.println("socket added to server"); 

    } 

    ArrayList<String> results = new ArrayList<String>(); 
    for (Scanner scanner : scan_list) { 
     String res2 = ""; 
     while (scanner.hasNext()) { 
      String res = scanner.next(); 
      res2 += res + " "; 
     } 
     if (!res2.equals("")) { 
      results.add(res2); 

     } 

    } 

    for (String string : results) { 
     System.out.println(string); 
    } 

私はこのコードを実行すると:

PrintStream p = new PrintStream(sock.getOutputStream()); 

p.println(thread_name + "found : " + item); 

とサーバ側で、私はInputStreamを使用して情報に到達しようとしている:そして、私はこのようなソケット経由で送信しようとしています何も出力しないか、ただ1つのスレッドの情報を出力します。どうすれば修正できますか?あなたのアドバイスのための

のTyのhasNextためdocs from Scanner(から撮影

+2

何かを送った後にクライアントを切断していますか?さもなければ、 'scanner.hasNext())'は永遠に真でなければなりません(あなたのプログラムがハングする) – zapl

答えて

1

):スキャンする入力を待っている間に

このメソッドをブロックすることがあります。

クライアントがまだ接続されている限り、hasNext()呼び出しはブロックされます(呼び出しがブロックされないファイルのように)。

注:この行は無意味です:

String res2 = ""; 

文字列imutableあるので、あなたがそれに何かを再割り当てする場合、それは完全に新しいオブジェクトを作成します。代わりに、StringBuilder/StringBufferを使用する必要があります。

+0

これは '役に立たない'ではありません。追加する初期値です。それが動作します。 'StringBuilder'は確かに良いでしょう。 – EJP

関連する問題