gpt4 book ai didi

Java MulticastSocket 发送但不接收

转载 作者:太空宇宙 更新时间:2023-11-04 15:01:15 24 4
gpt4 key购买 nike

我编写了一些应该从 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()));
}

更新:我忘了包含输出..

听力发送发送发送发送正在发送

此时,它将只是等待接收某些内容。

最佳答案

一个简单的事情可能是如果您位于路由器后面。您的路由器可能正在接收传入请求,但不知道将其发送到哪里。这需要您将端口 5555 转发到正确的内部 IP,即运行服务器程序的计算机。

检查此问题的一种方法是使用 IP 127.0.0.1localhost 在本地运行客户端和服务器。

关于Java MulticastSocket 发送但不接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22543473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com