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

问题是什么?谢谢。

4

3 回答 3

1

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

你确定你没有混淆单播和多播地址吗?

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

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

于 2009-07-08T07:12:33.447 回答
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);

要将 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。

于 2009-07-09T01:22:43.047 回答
0

我不是网络专家,但我会尝试尝试一下。我假设所有数据包都通过默认接口发送,该接口知道三个地址:它自己的、环回和网关。因此,从 192.168.1.111 发往 10.10.1.117 的数据包需要通过默认网关(假设这是 192.168.1.1),但如果 192.168.1.1 不知道到 10.10.0.0 的路由怎么办,那么目标主机遥不可及对吗?我不知道,这是我的猜测。

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

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

于 2009-07-08T07:42:48.267 回答