我希望Peer(s)能够通过WIFI LAN发送DatagramPackets,其唯一目的是发现其他Peers。所以,我让每个Peer都由一个客户端(发送数据包)和一个服务器(监听数据包)组成。
我只能通过在每台机器上使用IPConfig来获取它们各自的IPv4地址,然后将其用作创建DatagramPacket的参数来实现这一点: -
InetAddress server = InetAddress.getByName("THE IPv4 ADDRESS OF THE PEER'S SERVER
RUNNING ON THE OTHER MACHINE");
DatagramPacket sendPacket = new DatagramPacket(outBuffer, outBuffer.length,
server, serverPort);
我是否在这里以正确的方式使用广播(用于同伴发现)因为如果我这对我来说似乎很垃圾?我假设我可以在machineA上有一个客户端将数据包发送到LAN深渊,而在machineB上运行的服务器将监听整个LAN并检测数据包。目前,我所做的只是在运行服务器的机器上手动使用IPConfig,并在运行客户端的机器上的DatagramPacket中键入该地址,这看起来毫无意义。
我可以很好地使用多播,但我认为广播更多是我需要的同伴发现。
帮助表示赞赏。
答案 0 :(得分:1)
这不是真正的广播,因为你提供服务器的地址,而不是广播地址(255.255.255.255
,或者你的本地网络广播地址是什么(如192.168.1.255
,如果你的网段是192.168.1.0/24
)。
您还可以考虑使用防火墙阻止服务器端口上的传入UDP数据包。您应该查看DatagramSocket / DatagramPacket的文档,看看是否有正确绑定服务器套接字或从客户端正确发送数据包的神奇咒语。
[修改:如何查找网络广播] 一旦您知道网络地址就可以找到网络广播地址,您可以从IP和子网掩码中分辨出这两个地址。子网掩码基本上显示了网络的多少地址,以及客户端的数量。 (子网掩码通常写为“网络掩码”)例如:
IP:192.168.1.101 网络掩码:255.255.255.0 网络地址(CIDR):192.168.1.0/24 广播地址:192.168.1.255
或:
IP:10.13.28.55 网络掩码:255.255.0.0 网络:10.13.0.0/16 广播地址:10.13.255.255
基本上,网络地址最后有一堆零,广播地址用一个替换它们。
IPv4地址是32位数字(最容易将它们视为无符号。如果你按地址和网络掩码进行按位运算,你会得到网络地址。如果按位或按位,则为+在网络掩码中,您获得广播地址(因此(addr & netmask) | ~netmask)
将为您提供本地广播)。
255.255.255.255
(或0xFFFFFFFF
)是全球广播地址。 IP广播不会跨网段,因此发送给它是安全的。
答案 1 :(得分:0)
对服务器和客户端使用广播地址255.255.255.255
。