尝试将数据包单播到可用网络。共有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);
}
}
问题是什么?感谢。
答案 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堆栈。无论如何,我很想知道你发现了什么。请保持更新。
此外,记下地址可能会有所帮助。跟踪路线是你的朋友。