2009-07-08 6 views
1

사용 가능한 네트워크로 패킷을 유니 캐스트하려고합니다. 완전히 3 개의 네트워크가 있습니다. 한 네트워크에서만 패킷을 가져와 관리합니다. 그러나 다른 네트워크에서 패킷을받을 수 없습니다. 문제점 사용 가능한 네트워크로 패킷을 유니 캐스트하려고 시도합니다.

이 코드를 사용

..

 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); 
      } 
     } 

확률값은 무엇인가? 감사.

답변

1

나는 너 자신에게 패킷을 보내려고한다고 생각하니?

유니 캐스트 및 멀티 캐스트 주소를 혼동하지 않으시겠습니까?

멀티 캐스트하려고하지 않는, 그래서 좋아

...

네트워크 인터페이스의 각 IP 주소를 가지고있다. 여기에서하는 일은 네트워크 카드로 패킷을 보내는 것입니다. 실제로 네트워크의 문제가 아닙니다. 귀하의 컴퓨터가 자신의 IP 주소를 가장 잘 알고 있고 127.0.0.1로 경로를 변경하기 때문입니다.

+0

예 Eric, 물론입니다. 사용 가능한 네트워크 어댑터에 패킷을 유니 캐스트하고 싶습니다. 나는 위의 코드가 그렇게한다고 생각합니다. 어떤 오류도 발생하지 않습니다. 모든 네트워크 주소를 가져 와서 패킷을 보낼 수 있습니다. 그러나 다른 네트워크 어댑터의 IPaddress에서 패킷을받지 못합니다. 코드 슈트는 사용 가능한 모든 네트워크 어댑터에 유니 캐스트 할 수 있어야합니다. – Anuya

0

저는 네트워크 전문가는 아니지만 그걸로 찌르려고합니다. . 나는 모든 패킷이 세 가지 주소를 알고있는 기본 인터페이스를 통해 전송된다고 가정합니다 : 자신, 루프백 및 게이트웨이입니다. 따라서 10.10.1.117로 예정된 192.168.1.111의 패킷은 기본 게이트웨이 (192.168.1.1)를 통과해야하지만 192.168.1.1이 10.10.0.0으로의 경로를 모르는 경우 대상 호스트 도달 할 수없는 권리? 나는 모르겠다. 그건 내 추측이다.

어쩌면 틀 렸지만. 어쩌면 기본 장치를 사용하지 않고 대신 TCP/IP 스택과 함께 사용 가능한 모든 인터페이스를 사용합니다. 어쨌든, 나는 네가 발견 한 것을보고 싶어한다. 우리를 계속 업데이트하십시오.

또한 주소를 메모하면 도움이 될 수 있습니다. 추적 경로는 친구입니다.

1

하나 이상의 인터페이스가 있으므로 멀티 홈입니다. 각 인터페이스마다 IP 주소가 있습니다. 따라서 세 개의 인터페이스를 사용하면 세 개의 로컬 IP를 갖게됩니다. UdpClient를 사용할 때 IP를 사용하여 보낼 인터페이스를 지정해야합니다.

는 다음과 같은했다고 가정 할 수 있습니다 세 지역 IP의

10.1.0.1
10.2.0.1
10.4.0.1
255.255.0.0의 넷 마스크

당신이 원하는과 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 패킷을 전송합니다.