2012-04-17 30 views
0

我使用UDP創建客戶端 - 服務器應用程序。在任何人問我爲什麼使用UDP而不是TCP之前,讓我通過說明它的賦值來告訴答案。好的問題!困惑爲什麼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 

這是我希望所有的客戶端發送和接收消息。但是,當第二個客戶端做同樣的我得到以下輸出:我收到了同樣的信息在這裏兩次,但第一個客戶端上我只收到過一次

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 

通知。這裏是我的邏輯在服務器類將消息發送到客戶端:

// 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

如果這是一項家庭作業,您應該添加家庭作業標籤! – 2012-04-18 17:58:06

回答

0

我不知道爲什麼這樣做,但我通過在代碼中放置一個全局變量來固定它,以保存用於比較的端口的臨時值:/