Indy TUDPServer广播

时间:2016-11-24 10:11:51

标签: delphi virtualbox indy broadcast

我有三个网络适配器,两个有效和一个'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。

1 个答案:

答案 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);
相关问题