coy*_*508 1 c sockets udp broadcast winsock2
我遇到了广播问题:我可以发送消息,接收者接收并发送回,但我无法得到这些响应。不过,它显示在wireshark 上,所以它就在那里。
这是我在发件人端所做的:
但是我没有在那个 recv 中得到响应,即使它显示在 Wireshark 上并且它没有被计算机拒绝(没有 ICMP 消息)。
这个过程有什么问题,还是我看的地方不对?
(顺便说一句,当不使用广播选项和目标 IP 时,它工作正常)
问题是您正在使用connect(),它将套接字与特定的远程 IP:Port 相关联,因此套接字只能recv()从该特定的远程 IP:Port 发送数据包,而不能发送其他数据包。您正在“连接”到广播 IP,这允许您send()广播数据包,但您将收到来自各个对等 IP 的响应,因此recv()将静默丢弃所有响应,因为源 IP 与您连接的 IP 不匹配.
当你正在做的直接对等通信,是有意义的使用connect(),send()以及recv()让插座管理IP地址给你。但是在广播时,不要使用connect()! 使用sendto()代替send()将数据包发送到广播 IP,然后使用recvfrom()代替recv()允许来自任何对等 IP 的响应(recvfrom()将告诉您每个数据包来自的源 IP)。