2012-04-17 6 views
0

UDPを使用してクライアント/サーバーアプリケーションを作成しています。誰かが私になぜTCPの代わりにUDPを使っているのかを聞かれる前に、私はそれが割り当てのためにそのことを述べて答えるように言います。さて、質問にしてください!UDPクライアントサーバーがこれをやっている理由について混乱しています

UDPサーバーにパケットを送信するためにスレッドを生成するクライアントクラスを作成しました。メインスレッドは入ってくるパケットを待ち受けます。サーバークラスはウェルカムメッセージプッシュサービスとして機能するだけでなく、クライアントのメッセージを全員に渡す中間者としても機能します。これは私がすべてのクライアントがメッセージを送受信する方法である

Please enter your name for the server: 
James 
Welcome to the server James 
Hi all // User james types this 
James: Hi all // Outputs his message to him once - that's fine 
Hi mate // Output from another user 

は、私が最初にクライアントの出力はこのように書き、2つのクライアントを作成したとき。私は二度ここに同じメッセージを受信したが、最初のクライアント上で、私は一度だけそれを受け取る

Please enter your name for the server: 
Owen 
Welcome to the server Owen 
Hi all   // Client one (James wrote this) 
Hi mate 
Owen: Hi mate 
Hi mate 

注意:2番目のクライアントが同じことをしたときに、私は次の出力を取得します。ここに私のロジックはクライアントにメッセージを送信するためのサーバークラスである:

// Get the response 
       String response = new String(packet.getData()); 

       // Test - send a message from the server to each user 
       if(ports.size() > 1) 
       { 
        for(int i = 0; i < ports.size(); i++) 
        { 
         System.out.println("Values in port arraylist: "+ports); 

         if(packet.getPort() == ports.get(i)) 
         { 

         } else 
         { 
          // String toSend = names.get(i).concat(": "+response); 
          // System.out.println(toSend); 
          buf = response.getBytes(); 

          System.out.println("Packet Receieved from Port: "+packet.getPort()+"\nPorts.get: "+ports.get(i)); 

          // Could store all address in own arraylist for outside local host networking 
          int thisPort = ports.get(i); 
          packet = new DatagramPacket(buf, buf.length,packet.getAddress(),thisPort); 
          socket.send(packet); 
          System.out.println("Sending message to port "+ports.get(i)); 
         } 
        } 
        System.out.println("\n"); 
        packet = null; 
       } 

これをテストするために私はここに何が起こっていたか確認するために、いくつかの出力ラインを追加し、これを得た:

Values in port arraylist: [61493, 61494] 
Values in port arraylist: [61493, 61494] 
Packet Receieved from Port: 61493 
Ports.get: 61494 
Sending message to port 61494 


Values in port arraylist: [61493, 61494] 
Packet Receieved from Port: 61494 
Ports.get: 61493 
Sending message to port 61493 
Values in port arraylist: [61493, 61494] 
Packet Receieved from Port: 61493 
Ports.get: 61494 
Sending message to port 61494 
+0

宿題が割り当てられている場合は、 –

答えて

0

私はなぜそれがこれを行っていたのかわかりませんが、比較のためにポートの一時的な値を保持するコードにグローバル変数を配置することで修正しました:/

関連する問題