还有很多其他与此问题相关的答案,但我相信这是具体的。
我正在使用Delphi XE2和Indy 10.5.8以及TIdUDPServer
在我的本地开发网络中,我拥有相同网络ip子范围内的所有内容,并且所有连接到同一个接入点(LinkSys)
我将Androids sendind UDP Broadcast发送到255.255.255.255以请求在端口44444上使用TIdUDPServer监听Delphi中编写的服务器IP地址。
请求到达那里很好,我可以回答没问题。完全符合预期。
但是我注意到在某些网络中它不起作用!它总是基于接入点的简单网络,我不确定,但似乎问题发生在服务器PC连接到LAN端口,而设备使用wifi,都在同一个接入点。
可能是接入点不通过LAN和wifi广播UDP数据包的情况?我知道这种广播非常有限,但我没有发现任何信息告诉我在同一个接入点存在这样的限制。
有没有办法测试或解决方法?
这个解决方案需要足够强大才能处理那里的许多AP。
编辑:对于那些想要从网络中获取更多信息的源代码,包括下面答案中提到的广播IP,请遵循此解决方案,它就在那里。
答案 0 :(得分:6)
255.255.255.255
不是发送UDP广播的最佳选择,除非另有配置,否则某些路由器/防火墙会阻止它。更好的选择是使用NIC的实际子网广播IP。例如,如果UDP套接字绑定到子网掩码为192.168.0.1
的本地IP 255.255.255.0
,则该子网的广播IP为192.168.0.255
。
大多数平台都有特定于操作系统的API,用于检索NIC的实际广播IP,例如POSIX系统上的getifaddrs()
,或者至少用于检索NIC的子网掩码,例如GetAdaptersInfo()
和{{1在Windows上,您可以手动计算广播IP。
在将来的版本中,可以将检索本地广播IP添加到Indy。