我试图在我的本地网络中发送UDP数据包到所有设备,我试图使用相同的(FMX)应用程序从不同的设备发送数据包。但由于某种原因,它只在某些设备上工作,而在其他设备上则不行。
示例代码:
IdUDPClient1.BroadcastEnabled := true;
IdUDPClient1.Broadcast('MyApp Discover Packet', 25168);
字符串
根据Indy手册,这应该将数据发送到广播地址255.255.255.255
。
当我将这个编译为一个移动的应用程序并运行它时,它确实从我的手机(Android设备)在同一个网络上完美地工作。我在我的电脑上用Wireshark验证了我的电脑收到了数据包。但是当我把同一个应用程序编译成Windows(64位)应用程序并在我的PC上运行时,它似乎什么也没做。没有错误,Wireshark甚至不显示网络上的传出数据包,就像它从未发送过一样。然而,如果我在PC上的同一个应用程序中的同一个端口上侦听,我确实会收到UDP数据包-不像从我移动的,它们只是从来没有发送到网络。我做错了什么?
如果使用当前子网的广播地址更好(例如192.168.0.255
),那么获得它的最佳方法是什么?例如,Indy是否提供了一种列出所有网络适配器及其IP地址和子掩码的方法?
1条答案
按热度按时间bprjcwpo1#
使用当前子网的广播地址会更好吗(例如192.168.0.255)
是的,特别是因为某些路由器实际上默认阻止255.255.255.255上的一般广播,但不阻止特定于子网的广播。
另外,请注意,UDP广播仅适用于IPv4。IPv6不支持广播,所以你必须使用多播。
最好的办法是什么?例如,Indy是否提供了一种列出所有网络适配器及其IP地址和子掩码的方法?
是的,通过全局
GStack
对象的TIdStack.GetLocalAddressList()
方法,例如:字符串