题
试图单播数据包到可用网络。总共有3网络。托管只在一个network.But拿到包我不能够在不同的网络接收数据包。
使用此代码..
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);
}
}
什么是概率?感谢。
解决方案
我想你想发送数据包到自己呢?
您确定你不是混淆的单播和多播地址?
好了,所以你不是要播...
每个网络接口的具有IP地址。你在做什么这里是将数据包发送到您的网卡。这是不是真的网络的问题,因为你的机器很可能知道自己的IP地址,并将其重新路由到127.0.0.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之间的差异。
我没有太多的网络大师,但我会尝试采取刺伤它。我认为所有的数据包通过哪知道三个不会忽略默认接口发送:它自己,环回和网关。因此,从192.168.1.111往10.10.1.117包将需要通过默认网关(让我们只说这是192.168.1.1),但如果192.168.1.1不知道该怎么10.10.0.0的路由,那么目的主机可达吧?我不知道,这是我的猜测。
虽然,也许我错了。也许它不使用默认设备,而是使用所有可用的接口,使用TCP / IP协议栈一起。无论如何,我很好奇,看看你发现了什么,虽然。请让我们更新。
此外,记下这些地址可能是有帮助的。跟踪路由是你的朋友。