2013-06-23 26 views
1

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

喜欢,发送请求“你好,有人在那里?”然后听一个回应?

我得到了与发送和接收没有问题,只是想知道是否有比尝试每个IP地址的其他可能的方式...

编辑:这是我目前使用:

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

最后一行代码被注释掉了,因为它会引发异常。现在我已经读过发送数据包到255.255.255.255“已经过去几年不推荐使用”,而且很可能在很多局域网中无法使用。另外,我不确定我是否需要MulticastSocket或者正常的DatagramSocket也可以。但无论如何,现在发送UDP广播的首选方式是什么?

+1

255.255.255.255不是一个有效的多播组地址,并且您不加入多播组发送给它们,而是从它们接收。你需要决定你在做什么:广播或组播。他们不是一回事。 – EJP

+0

我总是倾向于寻求最简单的解决方案。如果您在C类子网上,我建议您简单地向同一子网上的所有其他253个主机发送单播。哎呀,即使是B班,为什么不呢?它只有大约65,000个目的地。 – wookie919

+0

@ wookie919“为什么不”?因为路由器可能不会支持它? – EJP

回答

3

嗯,我发现了这件事由我自己:

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

你也应该做setBroadcast(true);允许广播某些(?)系统。

+0

如果组中有3台主机,它们是否都会加入组241.3.3.7?然后一个主机发送一个数据包到241.3.3.7,它会到达在241.3.3.7上监听的所有主机? – RenegadeAndy

+0

@RenegadeAndy除了241。*。*。*不在支持的范围内。 – AyCe

-1

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

这里是java教程,以帮助您实现这一目标:

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

+0

谢谢,我会看看... – AyCe

+0

我正在使用新的MulticastSocket();现在用setBroadcast(true);.由于我不想接收,但只是发送消息,这似乎工作,目标地址我使用InetAddress.getByName(“255.255.255.255”);所有监听端口的应用程序都会发送它来接收它。 multicastSocket.joinGroup(addr);将抛出一个异常,但它的工作原理没有... – AyCe

+0

答案是不正确的。广播时不需要MulticastSocket。这是因为,多播。再次,他们不是一回事。您引用的链接措辞不正确:它是关于多播,而不是广播。我报告了错误。 – EJP