2016-11-24 115 views
0

我有三個網絡適配器,兩個有效的和一個'VirtualBox主機專用網絡'。Indy TUDPServer廣播

當試圖發送廣播與代碼波紋管(綁定正確的IP),廣播數據獲取發送到VirtualBox網絡適配器(用wireshark檢查),當然得不到答案。

FIdUDPServer.Binding.IP := Settings.netInterfaces[settings.sett_net_interface].AddrIP; 
FIdUDPServer.BroadcastEnabled := True; 
FIdUDPServer.Broadcast(udpDiscovery, BCport); 

我試着去結合我真正的適配器IdUDPServer(Binding.IP),但廣播的IP來自錯誤的適配器發送。

當我禁用virtualbox適配器時,再次即時獲取答案。 這裏有什麼問題? IDE是Delphi 2010.

+0

您是否可以遍歷'Settings.netInterfaces []'的每個元素?如果是這樣,當你重複每個「廣播(0)」時會發生什麼? –

+0

@HughJones我做了一些修改,即時通訊使用接口的廣播地址。例如,對於「接口」192.168.100.100即時通訊使用192.168.100.255作爲廣播地址的目的地。這樣,我可以在正確的界面上發送廣播,但在我的其他一些PC上運行軟件,我沒有得到答案(即使我發送了所有的界面)。 – grinner

回答

2

訪問TIdUDPServer.Binding屬性會綁定並激活服務器(如果它尚未),然後返回服務器綁定的第一個綁定對象。在激活TIdUDPServer時更改Binding.IP屬性不起作用。在激活服務器之前,必須使用所需的本地綁定填充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);