1

有没有办法在局域网内发送一个 UDP 数据包,以便每台机器都能接收到它?(当然不能保证,因为它的 UDP)。

比如,发送一个请求“你好,有人在吗?” 然后听取回应?

我发送和接收没有问题,只是想知道除了尝试每个IP地址之外是否还有其他方法......

编辑:这是我目前使用的:

...
multicastSocket = new MulticastSocket();
multicastSocket.setBroadcast(true);
broadcastGroup = InetAddress.getByName("255.255.255.255");
// multicastSocket.joinGroup(broadcastGroup);
...

最后一行代码被注释掉,因为它抛出了一个异常。现在我已经读到将数据包发送到 255.255.255.255 是“多年来不推荐使用的”,并且很可能无法在许多 LAN 上工作。另外,我不确定我是否甚至需要一个MulticastSocket为此或者正常DatagramSocket是否也可以工作。但无论如何,现在发送 UDP 广播的首选方式是什么?

4

2 回答 2

3

好吧,我自己发现了:

只需打开 aMulticastSocketjoinGroup在 224.0.0.0 和 239.255.255.255 之间的任何 IP 上使用。当然,与该多播组相关的所有内容都需要在同一个多播 IP 上接收。我这样做是为了发送和接收,但是,我认为你只在接收消息时才需要它。当您想向 IP 组中的每个人广播数据包时,只需将其发送到您选择的 IP。

您还应该setBroadcast(true);允许某些(?)系统的广播。

于 2013-06-30T16:45:53.990 回答
-1

从技术上讲,您实际上需要广播消息。基本上你需要MulticastSocket,这种套接字在客户端用于监听服务器广播给多个客户端的数据包。

这是帮助您实现这一目标的java教程:

http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html

于 2013-06-23T14:25:32.207 回答