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