我试图在所有的网络接口(2个LAN,一个wifi)上发送一个组播数据包。我最初跟在这tutorial。在我所有的IP上发送一个UDP组播数据包
我遇到的问题是,似乎该数据包似乎只与我的一个IP地址。
这是我目前的代码。
private static void SendOnAllCards(int port, String address)
{
using (Socket mSendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
mSendSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership,
new MulticastOption(IPAddress.Parse(address)));
mSendSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 255);
mSendSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
mSendSocket.Bind(new IPEndPoint(IPAddress.Any, port));
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(address), port);
mSendSocket.Connect(ipep);
byte[] bytes = Encoding.ASCII.GetBytes("This is my welcome message");
mSendSocket.Send(bytes, bytes.Length, SocketFlags.None);
}
}
我试图做手工:
private static void SendOnAllCards(int port, string remoteAddressSrc)
{
foreach (IPAddress remoteAddress in Dns.GetHostAddresses(Dns.GetHostName()).Where(i=>i.AddressFamily == AddressFamily.InterNetwork))
{
using (Socket mSendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
mSendSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership,
new MulticastOption(IPAddress.Parse(remoteAddressSrc)));
mSendSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 255);
mSendSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
mSendSocket.Bind(new IPEndPoint(IPAddress.Any, port));
IPEndPoint ipep = new IPEndPoint(remoteAddress, port);
mSendSocket.Connect(ipep);
byte[] bytes = Encoding.ASCII.GetBytes("This is my welcome message");
mSendSocket.Send(bytes, bytes.Length, SocketFlags.None);
}
}
}
这工作,但它意味着我已经创造尽可能多的插座,我已经IP(在此示例中我在每个创建它们发送,但这只是一个测试),我不喜欢我获得所有IP的方式。
那么这样做的正确方法是什么?
编辑秒奖金的问题:为什么是这个工作的时候我指定的Connect
本地IP,其指定的远程地址,但不会对Bind
?
我不知道,了解它如何帮我? – J4N 2013-03-06 16:05:40
然后,您可以使用分配给每个网卡的IP信息来广播您的多播消息。在您的原始文章中,您正在遍历分配给主机的IP地址,但每个NIC可能有多个IP地址。这是使用WMI提取网络适配器IP绑定的示例,然后可以使用WMI准确发送这些消息。 – 2013-03-06 16:27:26
我的问题不在于查找网络接口,而在于如何通过套接字将数据发送到多个接口 – J4N 2013-03-06 16:34:45