我有三个网络适配器,两个有效的和一个'VirtualBox主机-纯网络‘。
当尝试用下面的代码发送广播(绑定正确的IP)时,广播数据会被发送到VirtualBox网络适配器上(用wireshark检查),当然也得不到答案。
FIdUDPServer.Binding.IP := Settings.netInterfaces[settings.sett_net_interface].AddrIP;
FIdUDPServer.BroadcastEnabled := True;
FIdUDPServer.Broadcast(udpDiscovery, BCport);
我试图将我的真正适配器的IP绑定到IdUDPServer (Binding.IP),但是广播是从错误的适配器发送的。
当我禁用virtualbox适配器时,我再次获得答案。这里怎么了?IDE是德尔福2010。
发布于 2016-11-24 22:39:07
如果尚未访问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);
https://stackoverflow.com/questions/40783520
复制相似问题