我遇到广播问题:我可以发送消息,接收方收到消息并将其发回,但我无法得到这些回复。然而,它显示在wireshark上,所以它就在那里。
这是我在发件人的最后所做的事情:
但是我不能在该recv中得到回复,即使它在Wireshark上显示并且它没有被计算机拒绝(没有ICMP消息)。
这个过程有什么问题,或者我没找对地方?
(顺便说一下,当不使用广播选项和目标IP时,它可以正常工作)
答案 0 :(得分:4)
问题是您正在使用connect()
,它将套接字与特定的远程IP:端口相关联,因此套接字只能来自该特定远程IP的recv()
个数据包:端口没有别的。您正在“连接”广播IP,这允许您send()
广播数据包,但您将接收来自各个对等IP的响应,因此recv()
将默默地丢弃自源以来的所有响应IP与您连接的IP不匹配。
当您进行直接的点对点通信时,使用connect()
,send()
和recv()
并让套接字为您管理IP是有意义的。但是在播放时,请勿使用connect()
!使用sendto()
代替send()
将数据包发送到广播IP,然后使用recvfrom()
代替recv()
来允许来自任何对等IP(recvfrom()
的响应告诉你每个数据包来自的源IP。)