Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向局域网中的每个人发送UDP数据包?_Java_Networking_Udp - Fatal编程技术网

Java 向局域网中的每个人发送UDP数据包?

Java 向局域网中的每个人发送UDP数据包?,java,networking,udp,Java,Networking,Udp,有没有办法在局域网内发送UDP数据包,以便每台机器都能接收到它?(当然没有保证,因为它是UDP) 比如说,发送一个请求“你好,有人在吗?”然后倾听回应 我在发送和接收方面没有问题,只是想知道除了尝试每个IP地址之外是否还有其他方法 编辑:这是我目前使用的: ... multicastSocket = new MulticastSocket(); multicastSocket.setBroadcast(true); broadcastGroup = InetAddress.getByName("

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

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

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

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

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

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

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

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


我自己发现的:

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


您还应该执行
setboodcast(true)允许对某些(?)系统进行广播。

我正在使用新的MulticastSocket();现在使用路演(真实);。因为我不想接收而只是发送消息,所以对于目标地址,我使用InetAddress.getByName(“255.255.255.255”);在端口上侦听的所有应用程序我将其发送到接收端口。多播socket.joinGroup(addr);抛出异常,但在没有异常的情况下也可以工作…答案不正确<广播时不需要代码>多播套接字
。它是用于多播的。再说一次,它们不是一回事。你引用的链接措辞不正确:它是关于多播的,而不是广播。我报告了错误。255.255.255.255不是有效的多播组地址,您加入多播组不是为了向其发送,而是为了从其接收。你需要决定你在做什么:广播还是多播。它们不是一回事。我总是倾向于寻求最简单的解决方案。如果您在C类子网上,我建议您只需向同一子网上的所有253台其他主机发送单播。见鬼,即使是B班,为什么不呢?只有大约65K个目的地。@wookie919“为什么不”?因为路由器可能不支持它?我只想向局域网中的每台计算机发送一个广播数据包。我的解决方案可以解决这个问题,但我可以用数据报代替多播,对吗?所以对于我的问题,我根本不需要关心多播,因为我只想发送,对吗?好的,所以我只要更换插座,它就“固定”了。然而,现在广播的首选方式是什么?我听说IPv6根本不支持广播?这会成为一个问题吗?@EJP:一个不能支持65K单播数据包的路由器?我想你误解我了。AyCe:广播/多播的问题在于它依赖路由器/交换机为您完成工作。基本上,您所做的是将单个数据包注入网络,并依靠网络为每个可用主机复制数据包。如果您可以控制网络,那么通过IP发送带有广播目标地址的UDP就可以了。如果没有,再次说明,向所有IP地址发送单播有什么问题?至少这种方法可以保证在任何网络中工作。例如,如果组中有3台主机,它们是否都会加入组241.3.3.7?然后,一台主机将向241.3.3.7发送一个数据包,该数据包将准确到达所有侦听241.3.3.7?@renegadendy的主机,但241.*.*不在支持的范围内。