两台计算机以太网TCP Modbus通信连接被拒故障排查
Modbus TCP跨机通信连接被拒的修复方案
核心故障原因
你当前遇到的连接被拒错误,和以太网直连链路无关,核心问题是主从站代码均使用了127.0.0.1回环地址:该地址仅能用于本机进程间通信,无法跨设备访问,且从站仅绑定回环地址时,不会响应外部网卡的连接请求。
必须修改的配置与代码项
- 从站监听地址修改
将从站代码中绑定回环地址的行替换为监听所有网卡:
如果需要指定监听网卡,也可以直接填写从站设备以太网口的静态IP,禁止填写127.0.0.1。// 原代码:IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 }); IPAddress address = IPAddress.Any; - 主站连接地址修改
将主站连接的目标IP替换为从站设备的以太网实际IP,禁止使用回环地址:// 原代码:using (TcpClient client = new TcpClient("127.0.0.1", 502)) // 示例:从站以太网IP设为192.168.1.10时如下填写 using (TcpClient client = new TcpClient("192.168.1.10", 502)) - 两台直连设备的IP配置
给两台电脑的以太网口设置同网段静态IP,无需配置网关:- 从站以太网IP:192.168.1.10,子网掩码:255.255.255.0
- 主站以太网IP:192.168.1.20,子网掩码:255.255.255.0
配置完成后在主站命令行执行ping 192.168.1.10,确认链路连通后再启动程序。
- 端口权限与防火墙配置
Windows系统默认限制普通程序绑定1024以下端口,502端口属于Modbus默认周知端口,需要右键以管理员身份运行Visual Studio启动从站程序,避免端口绑定失败;也可以将主从站代码中的端口统一改为5020这类1024以上的端口,规避权限问题。
同时需要在两台电脑的防火墙中添加入站/出站规则,放开你使用的Modbus通信端口,避免连接被防火墙拦截。 - 从站ID参数修正
你当前主站代码中ReadInputs第一个参数(从站ID)传值为0,但从站代码中仅添加了ID为1、2的两个从站设备,连接成功后需要将该参数改为1或2,对应你要访问的从站ID,否则会触发从站不存在的错误。
验证顺序
- 启动从站程序,确认控制台无端口占用、绑定失败类报错
- 启动主站程序发起连接
- 若仍有报错,先在主站使用
telnet 从站IP 端口命令确认端口可通,再排查代码参数问题
内容的提问来源于stack exchange,提问作者Cassius.Peter
相关产品推荐
相关产品推荐

