我可以在一台机器上testing广播数据包吗?

我想有一台服务器在同一台机器上发送广播UDP数据包和其他两个客户端,接收它们。 我能做些什么吗? 我会使用什么IP地址?


@gravyface给了我希望,但我试过:

  1. 服务器发送到127.255.255.255:54321和客户端收听0.0.0.0:54321。
  2. 服务器发送到127.255.255.255:54321和客户端收听127.0.0.1:54321。
  3. 服务器发送到127.255.255.255:54321和客户端收听127.255.255.255:54321。

他们没有工作! 🙁

OBS:我正在使用REUSE_ADDR和SO_BROADCAST选项。

第一个窗口:

socat -u udp-recv:12345,reuseaddr - 

第二个窗口:

 socat -u udp-recv:12345,reuseaddr - 

第三个窗口

 socat - udp-sendto:127.255.255.255:12345,broadcast 

然后在第三个窗口中input几行文字,看看是否有其他两个文字。

将“socat”replace为“strace -fe-network socat”,看看实际上正在调用什么系统调用(假设你在Linux上,其他的unice有时候被称为tusc,struss或dtruss)。 socat是开源的,二进制包可用于大多数操作系统。

 socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 3 setsockopt(3, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0 sendto(3, "qwe\n", 4, 0, {sa_family=AF_INET, sin_port=htons(12345), sin_addr=inet_addr("127.255.255.255")}, 16) = 4 

以上,接收“客户端”绑定到INADDR_ANY地址。 我发现并不知道为什么,如果绑定到回环子网上的地址,则看不到数据包进入。

也可以看看:

 $ ip route show table local dev lo scope link broadcast 127.0.0.0 proto kernel src 127.0.0.1 broadcast 127.255.255.255 proto kernel src 127.0.0.1 

如果客户端绑定到127.0.0.0或127.255.255.255和服务器发送到相同的地址(与SO_BROADCAST),那么它也可以。

发送广播stream量到127.255.255.255 应该工作,但显然是testing出来(和Wireshark / tcpdump是你的朋友在这里)。

显然你的客户也需要在回环设备上进行监听。