问题尝试将数据包单播到可用网络

时间:2009-07-08 06:58:30

标签: c# udp udpclient multihomed

尝试将数据包单播到可用网络。共有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);
            }
        }

问题是什么?感谢。

3 个答案:

答案 0 :(得分:1)

我认为您正在尝试向自己发送数据包?

您确定不会混淆单播和多播地址吗?

好的,所以你不是要尝试多播......

您的每个网络接口都有一个IP地址。你在这里做的是将数据包发送到你的网卡。这不是网络问题,因为您的机器很可能知道自己的IP地址并将其重新路由到127.0.0.1

答案 1 :(得分:1)

由于您有多个界面,因此您是多宿主的。对于每个接口,您将拥有一个IP地址。因此,使用三个接口,您将拥有三个本地IP。当您使用UdpClient时,您需要使用它的IP指定要发送的接口。

假设您有以下三个本地IP

  

10.1.0.1
  10.2.0.1
  10.4.0.1
  网络掩码为255.255.0.0

并且你想发送一个UDP数据包到10.2.5.5你需要将它发送出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);

并将UDP数据包发送到10.1.90.5,您需要将其发送到10.1.0.1,因此请使用以下代码

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

两者之间的区别是localEndPoint和targetEndPoint。

答案 2 :(得分:0)

我不是一个网络大师,但我会试着去试一试。我假设所有数据包都是通过默认接口发送的,该接口知道三个地址:它自己的,环回和网关。因此,目的地为10.10.1.117的192.168.1.111的数据包需要通过默认网关(假设这只是192.168.1.1),但是如果192.168.1.1不知道到10.10.0.0的路由,那么目标主机无法到达吗?我不知道,这是我的猜测。

虽然,也许我错了。也许它不使用默认设备,而是使用所有可用接口以及TCP / IP堆栈。无论如何,我很想知道你发现了什么。请保持更新。

此外,记下地址可能会有所帮助。跟踪路线是你的朋友。