2016-11-24 23 views
0

3つのネットワークアダプタ、有効な2つと「VirtualBoxホストオンリーネットワーク」があります。Indy TUDPServer Broadcast

正しいIPをバインドするコードでブロードキャストを送信しようとすると、ブロードキャストデータがVirtualBoxネットワークアダプタ(wiresharkでチェックされている)に送信され、もちろん無回答になります。 IdUDPServer(Binding.IP)まだ放送への私の本当のアダプタのIPをバインドしようとしている

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

イム

が間違ったアダプタから送信されています。

私が仮想ボックスアダプタを無効にすると、再び回答が得られます。 ここで何が間違っていますか? IDEはDelphi 2010です。

+0

「Settings.netInterfaces []」の各要素をループすることはできますか?もしそうなら、あなたは 'Broadcast(0)'をそれぞれ繰り返すとどうなりますか? –

+0

@HughJones私はインターフェイスのブロードキャストアドレスを使用しているためにいくつかの変更を行いました。たとえば、 'interface' 192.168.100.100 imの場合、ブロードキャストアドレスの宛先として192.168.100.255を使用します。この方法では、私は適切なインターフェイスで放送を送信することができますが、私のものよりもいくつかの他のPCでソフトウェアを実行していますが、私は答えを得ることはありません(私はすべてのインターフェイスで送信する場合でも)。 – grinner

答えて

2

プロパティがまだ存在しない場合は、このプロパティをバインドしてアクティブ化し、サーバーがバインドされている最初のバインディングオブジェクトを返します。 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); 
関連する問題