我正在開發一個與PC端服務器應用程序一起工作的移動應用程序(Android)。我需要使用組播UDP數據報在連接到WIFI區域的智能手機上發送信息。 我有兩個模塊: 第一個模塊是一個UDP多播服務器。在多播地址224.0.2.0:6789未收到本地主機的Java多路廣播套接字
private void connection() {
System.setProperty("java.net.preferIPv4Stack", "true");
String msg = "Hello";
InetAddress group = null;
try {
group = InetAddress.getByName("224.0.2.0");
} catch (UnknownHostException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
while (true) {
MulticastSocket s = null;
try {
s = new MulticastSocket(6789);
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
try {
s.joinGroup(group);
s.setTimeToLive(200);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
DatagramPacket hi = new DatagramPacket(msg.getBytes(),
msg.length(), group, 6789);
try {
s.send(hi);
System.out.println(hi.toString());
s.leaveGroup(group);
s.close();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
該功能(向上)創建一個MulticastSocket上和發送信息。
第二個模塊是第一個程序發送的UDP數據包的java接收器。
byte[] b = new byte[1024];
DatagramPacket dgram = new DatagramPacket(b, b.length);
MulticastSocket socket = null;
try {
socket = new MulticastSocket(6789);
} catch (IOException e) {
Log.e("WIFI_E", e.getMessage());
} // must bind receive side
try {
socket.joinGroup(InetAddress.getByName("224.0.2.0"));
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//while(true) {
try {
socket.receive(dgram);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // blocks until a datagram is received
Toast.makeText(getApplicationContext(), "Received " + dgram.getLength() +
" bytes from " + dgram.getAddress(), Toast.LENGTH_LONG);
dgram.setLength(b.length); // must reset length field!
//}
這是我的代碼。現在的問題。 當我啓動服務器(PC端)時,UDP數據包僅在本地主機上可見(使用Wireshark進行測試),並且smarthpone或其他PC無法接收它們。我嘗試關閉Windows防火牆和防病毒軟件,但無法正常工作。我不知道爲什麼數據包沒有在網絡上正確重定向。也許我的代碼中有一些錯誤?謝謝。
不同的機器如何連接?您的路由器可能配置爲不發送多播? – xaxxon
您是否已經找到解決方案?我正在爲類似的項目苦苦掙扎,這個項目幾乎完全相同,並且無法實現。注意:使用* nmap *我發現運行程序時指定的端口保持關閉狀態。 – s3lph