我有三个网络适配器,两个有效和一个'VirtualBox Host-Only Network'。
当尝试使用以下代码发送广播(绑定正确的IP)时,广播数据将在VirtualBox网络适配器上发送(使用wireshark检查),当然也没有回答。
FIdUDPServer.Binding.IP := Settings.netInterfaces[settings.sett_net_interface].AddrIP;
FIdUDPServer.BroadcastEnabled := True;
FIdUDPServer.Broadcast(udpDiscovery, BCport);
我试图将我的真实适配器的IP绑定到IdUDPServer(Binding.IP),但广播是从错误的适配器发送的。
当我禁用虚拟机适配器时,再次获得答案。 这有什么不对? IDE是Delphi 2010。
答案 0 :(得分:3)
访问TIdUDPServer.Binding
属性会绑定并激活服务器(如果尚未绑定),然后返回服务器绑定的第一个绑定对象。激活Binding.IP
时更改TIdUDPServer
属性无效。在激活服务器之前,必须使用所需的本地绑定填充TIdUDPServer.Bindings
集合,然后可以在激活服务器后使用集合中所需的绑定对象进行广播。例如:
FIdUDPServer.Active := False;
FIdUDPServer.Bindings.Clear.
FIdUDPServer.Bindings.Add.IP := Settings.netInterfaces[settings.sett_net_interface].AddrIP;
FIdUDPServer.BroadcastEnabled := True;
FIdUDPServer.Active := True;
FIdUDPServer.Broadcast(udpDiscovery, BCport);
// or:
// FIdUDPServer.Bindings[index].Broadcast(udpDiscovery, BCport);