c# – 具有多个NIC的UDP多播仅在一个接口处于活动状态时有效
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 具有多个NIC的UDP多播仅在一个接口处于活动状态时有效,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2253字,纯文字阅读大概需要4分钟。
内容图文
![c# – 具有多个NIC的UDP多播仅在一个接口处于活动状态时有效](/upload/InfoBanner/zyjiaocheng/776/36ee4b0b150c49499bcf6ad2850a562c.jpg)
我看了一遍,找不到解决这个问题的方法.我已经尝试过我能看到的所有组合而没有运气.
基本上,我想选择一个接口,在两台机器上启动UDP客户端和发送/接收消息.当只有一个NIC处于活动状态时,一切正常,但当两个处于活动状态时,它将停止工作.我看过Wireshark并且有一个NIC可以看到进出的数据包.
现在,当我使用两个网卡时,我只能从第一个枚举的网卡中接收TX,并且无法接收任何网卡.当两个NIC都处于活动状态时,WireShark不会在端口上显示任何收到的数据包.
代码如下.我曾经只有一个插座,但尝试了一些不同的东西.
public UDPInstance(IPAddress ip, int port, int RXFrequency)
{
rxFreq = RXFrequency;
// Listener Init
TXclient = new UdpClient();
RXclient = new UdpClient();
TXclient.ExclusiveAddressUse = false;
RXclient.ExclusiveAddressUse = false;
//localEp = new IPEndPoint(ip, port);
TXlocalEp = new IPEndPoint(ip, port);
RXlocalEp = new IPEndPoint(IPAddress.Any, port);
TXclient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
RXclient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
TXclient.Client.Bind(TXlocalEp);
RXclient.Client.Bind(RXlocalEp);
InterfaceIP = ip.ToString();
multicastaddress = IPAddress.Parse("239.0.0.222");
TXclient.JoinMulticastGroup(multicastaddress);
RXclient.JoinMulticastGroup(multicastaddress);
// Sender Init
remoteep = new IPEndPoint(multicastaddress, port);
Listener = null;
RXData = new List<string>();
StartListenerThread();
}
public void StartListenerThread()
{
Listener = new Thread(new ThreadStart(ListenerThread));
Listener.IsBackground = true;
Listener.Start();
}
public void StopListenerThread()
{
Listener.Abort();
}
private void ListenerThread()
{
while (true)
{
Byte[] data = RXclient.Receive(ref remoteep);
string datastr = Encoding.Unicode.GetString(data);
if (datastr != "")
{
string[] PacketStrings = datastr.Split(new char[] { '~' });
foreach (string pkt in PacketStrings)
RXData.Add(pkt);
}
Thread.Sleep(rxFreq);
}
}
public void Transmit(string data)
{
byte[] buffer;
buffer = Encoding.Unicode.GetBytes(data);
TXclient.Send(buffer, buffer.Length, remoteep);
}
解决方法:
迈克G是对的. UDPClient类的一个构造函数将IPEndPoint作为参数.如果IPEndPoint设置为本地接口的IP地址,那么这是UDPClient和底层套接字将使用的接口,是的,只要它们打开,您就可以将两个UDP客户端绑定到一台机器上的同一端口单独的本地IP接口(即多宿主或多NIC).
内容总结
以上是互联网集市为您收集整理的c# – 具有多个NIC的UDP多播仅在一个接口处于活动状态时有效全部内容,希望文章能够帮你解决c# – 具有多个NIC的UDP多播仅在一个接口处于活动状态时有效所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。