【C#编程常见问题1】上位机2个物理网卡,连接2个终端设备,为什么只能发现1台设备?如何才能同时自动发现两个终端设备呢?[详细解决方案]
起因
1台PC(开发机,2个物理网卡)2个终端设备1个交换机PC和终端设备之间是有自动发现协议的,UDP广播发送接收实现自动发现这种情况只能发现1台设备,另1台设备无法发现。(网友已经做了遍历网卡发送UDP自动发现指令)这种情况也是正常的,可以发现2台设备,没有任何问题。网友发了这个简易的拓扑图和现象描述后,跟我讲,他头都大了,跟同事拉扯了23天,还是没找出问题原因。于是偶遇找到了我。分析原因
我初步分析了一下,一开始看错了拓扑图。以为是2个PC电脑出现的问题。因为我遇到过走交换机无法发现或接收的问题,以为是同一个问题。后面又看了一遍不是那个问题。实际上这个就是一台PC电脑多个网卡UDP发送和接收的典型问题。详细步骤
我跟网友商讨远程帮他处理,这种小问题很适合远程查看处理,开发调试环境都齐全。第1步:我远程帮他安装了一个网络包调试工具,大名鼎鼎的鲨鱼软件第3步:跟他确认了是有UDP自动发现协议文档,大概看了下自动发现协议中的IP段和端口参数(常用的有广播或组播,一般情况下组播会优于广播,更精准,少占带宽)第4步:给网卡1和网卡2设置不同的IP地址,开启鲨鱼,分别监听物理网口1和网口2,看不同的情况,发包和收包是否完成。2个网口均能看到收包和发包(这里涉及隐私,不上图了)✨当无交换机,物理网口1和网口2分别连接设备1和设备2时:此时只能发现网口1收包发包正常,网卡2没有收包也没有发包。我们禁用网卡1,重新测试,发现网卡2也可以收包和发包。从这个现象,我们可以断定:网友的发包地方肯定是有问题了。网友的发包代码,只有1个send,无循环也无多网卡处理。所以这里肯定有问题了,多个网卡的时候,必须分别绑定不同网卡发包,才有可能不同网卡都收包。最终关键解决代码如下:(循环获取网卡IP很简单,不在这里列代码了)// 创建UDP客户端并绑定指定IP和端口// 创建IPEndPoint对象,指定要绑定的本地地址和端口IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.0.0.1"), 12345);UdpClient udpClient = new UdpClient(localEndPoint);
这个步骤,主要在于UDPClient绑定本地网卡,尤其多个网卡的时候,需要这样做。如果单个网卡,不绑定也没有关系。绑定网卡有2种方式:1.绑定IP,区分网口 2.绑定网卡,这种无需理会IP。这里用到的是第一个方式。第6步:问题解决,网友很开心。断开远程,各自安好!最后
如果通过以上步骤,你对单机多网卡UDP问题肯定是手到擒来了。必然可以解决,祝大家都能顺利解决同类问题。
电脑越用越顺,工作越做越少!
想要交流的要关注私信我或者在留言区留下脚印
❤️祝大家都有个开心的每一天!❤️
结束
你还知道哪些好看好玩的或者更丰富的知识?
欢迎留言区分享~
我会持续分享更多,记得关注点赞、分享、❤️
有需要交流的朋友,可以关注公众号【PPSBBS技术论坛】公众号。
大家有更好用的工具也可以在评论区留下脚印。
以上仅为个人观点不喜勿喷。欢迎大家留言讨论。
长期会发一些工具软件和网络信息观点,喜欢的可以关注【PPSBBS技术论坛】公众号。
文末
谢谢你看到这,我是蛋蛋,也是今一班狗蛋:初学不久;1周起号成功,单篇涨粉800+,坚持做长期主义者。
一起向上生长吧~