【发布时间】:2014-04-27 22:02:00
【问题描述】:
我编写了一些代码,假设从 MulticastSocket 接收数据。由于某种原因,套接字永远不会收到。我已将其分解为下面的代码。我发送了几个数据包,但从未收到这些数据包。我可以确认数据包已发送,因为 wireshark 检测到它们。此外,我已经从不同的机器(相同的网络)发送了数据包,但仍然没有收到数据包。我已确认防火墙已关闭,有什么想法吗?
@Test
public void test_testrun() {
InetAddress addr;
try {
addr = InetAddress.getByName("234.67.67.67");
} catch (UnknownHostException e) {
throw new RuntimeException(e);
}
int port = 5555;
byte[] data = "1234567890".getBytes();
final DatagramPacket sendPacket = new DatagramPacket(
data,
data.length,
addr,
port
);
// initialize the server.
MulticastSocket s;
try {
s = new MulticastSocket(port);
s.joinGroup(addr);
s.setLoopbackMode(true);
} catch (IOException e) {
throw new RuntimeException(e);
}
// send every 100 ms.
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0 ; i < 5; ++i) {
try {
System.out.println("Sending");
new MulticastSocket().send(sendPacket);
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}).start();
// receive the packet.
DatagramPacket packet = new DatagramPacket(new byte[data.length], data.length);
try {
System.out.println("Listening");
s.receive(packet);
} catch (IOException e) {
s.close();
throw new RuntimeException(e);
}
s.close();
Assert.assertTrue(Arrays.equals(data, packet.getData()));
System.out.println("DATA: "+ new String(packet.getData()));
}
更新: 我忘了包括输出..
聆听 发送 发送 发送 发送 发送中
此时,它只会等待接收东西。
【问题讨论】:
-
指定网络接口可以解决问题。 stackoverflow.com/a/8474839/1267536
标签: java