2009-07-08 6 views
1

利用可能なネットワークにパケットをユニキャストしようとしています。完全に3つのネットワークがあります。 1つのネットワークだけでパケットを取得することができます。しかし、私は異なるネットワークでパケットを受信することができません。このコードを使用して問題使用可能なネットワークにパケットをユニキャストしようとしています。

..

 foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()) 
     { 
      foreach (var ua in i.GetIPProperties().UnicastAddresses) 
      { 
       System.Windows.Forms.MessageBox.Show(ua.Address.ToString()); 
       IPAddress Tip = IPAddress.Parse(ua.Address.ToString()); 
       IPEndPoint targetEndPoint = new IPEndPoint(Tip, iTargetPort); 
       MyUdpClient sendUdpClient = new MyUdpClient(); 
       int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint); 
      } 
     } 

PROBは何ですか?ありがとう。

答えて

1

あなた自身にパケットを送信しようとしていると思いますか?

ユニキャストアドレスとマルチキャストアドレスを混同しないでください。

あなたがマルチキャストしようとしていないので、[OK]を

...

ネットワークインターフェースは、それぞれのIPアドレスを持っています。ここでやっていることは、ネットワークカードにパケットを送信することです。あなたのマシンはおそらく自分自身のIPアドレスを知っていて、それを127.0.0.1に再ルーティングするので、ネットワークの問題ではありません。

+0

はいエリック、私は確信しています。使用可能なネットワークアダプタにパケットをユニキャストする必要があります。私は上記のコードはそれを行うと思います。私は何の誤りもありません。 すべてのネットワークアドレスを取得してパケットを送信できました。 しかし、異なるネットワークアダプタでIPアドレスのパケットを受信しません。 コードシードは、利用可能なすべてのネットワークアダプタにユニキャストできます。 – Anuya

0

私はネットワークの専門家ではありませんが、 。私は、すべてのパケットが3つのアドレスを知っているデフォルトのインターフェイス、すなわちそれ自身、ループバック、およびゲートウェイを介して送信されると仮定します。したがって、10.10.1.117宛ての192.168.1.111からのパケットは、デフォルトゲートウェイを通過する必要があります(192.168.1.1としましょう)。しかし、192.168.1.1が10.10.0.0へのルートを知らない場合は、宛先ホスト到達不能な権利ですか?私は知らない、それは私の推測だ。

でも、多分私は間違っています。たぶんデフォルトデバイスを使用せず、その代わりにTCP/IPスタックと共にすべての利用可能なインターフェイスを使用します。とにかく、私はあなたが何を見つけるかを見て興味があります。更新してください。

さらに、アドレスを書き留めておくと役立つ場合があります。トレースルートはあなたの友人です。

1

複数のインターフェイスがあるので、マルチホームです。各インターフェースにはIPアドレスがあります。したがって、3つのインタフェースでは、3つのローカルIPを使用します。 UdpClientを使用するときは、IPを使用して送信するインターフェイスを指定する必要があります。

次の3つのローカルIPの255.255.0.0

のネットマスクと

10.1.0.1
10.2.0.1
10.4.0.1
を持っているし、あなたがしたいと仮定することができます10.2.5.5にUDPパケットを送信するには、10.2.0.1を送信する必要がありますので、次のコードを使用してください。

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.2.0.1"), 0); 
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.2.5.5"), iTargetPort); 
UdpClient sendUdpClient = new UdpClient(localEndPoint); 
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint); 

、あなたがlocalEndPointとtargetEndPointあるので、次のコード

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.1.0.1"), 0); 
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.1.90.5"), iTargetPort); 
UdpClient sendUdpClient = new UdpClient(localEndPoint); 
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint); 

に両者の違いを使用して10.1.0.1を、それを送信する必要が10.1.90.5にUDPパケットを送信します。

関連する問題