今天在演示过程中碰到一个问题,跟大家简单分享下:
问题背景:程序运行使用的工控机有两个网口,一个跟堆垛机、滚转、滚筒等设备共同引出的一条网线进行有线连接,另外一个网口跟管控中心使用无线模块连接,两个网口两个ip。
问题现象:今天打开程序运行,发现跟滚转设备通讯一直显示失败。
问题分析:正常情况下通讯应该是跟设备连接的网口就用跟设备连接的网口的IP和设备通讯,用无线模块通讯的网口就用跟无线模块连接的网口的IP和管控中心通讯,但是计算机有时可能会用无线模块的本地IP去和设备通信,这样就会显示通信失败,有点绕哈,举个例子就是有两个不同大小的杯子,一个黑色,一个白色,正常是黑色杯盖配黑色杯身,白色杯盖配白色杯身,现在黑色杯盖配白色杯身肯定是盖不上的。
解决方案:知道了问题的原因,解决方案就很明显了,我们需要在程序中指定各自本地网卡的IP去和各自的设备连接,即指定黑色杯盖配黑色杯身,白色杯盖配白色杯身。
代码展示:
使用Socket指定本地IP:
IPAddress IPLocal = IPAddress.Parse("192.168.1.12");
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Bind(new IPEndPoint(IPLocal, 0));
使用TcpClient指定本地IP:
TcpClient tcpClient = new TcpClient(new IPEndPoint(IPAddress.Parse("192.168.1.50"), 0));
备注:ip号后的端口0代表系统自动去找一个可用的端口,也可以自己指定端口。
限于掌握知识有限,有些地方理解会有偏差,欢迎各位师傅兄弟交流指正
网友评论