c# – 具有多个NIC的UDP多播仅在一个接口处于活动状态时有效
发布时间:2020-12-15 17:19:00 所属栏目:百科 来源:网络整理
导读:我看了一遍,找不到解决这个问题的方法.我已经尝试过我能看到的所有组合而没有运气. 基本上,我想选择一个接口,在两台机器上启动UDP客户端和发送/接收消息.当只有一个NIC处于活动状态时,一切正常,但当两个处于活动状态时,它将停止工作.我看过Wireshark并且有一
我看了一遍,找不到解决这个问题的方法.我已经尝试过我能看到的所有组合而没有运气.
基本上,我想选择一个接口,在两台机器上启动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,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).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |