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