我需要通过 TCP 从 ModBus 设备(modbus 从站)获取数据,但该设备必须作为 TCP 客户端公开(在这种情况下,它消耗的电池要少得多)。这意味着两台机器都必须作为 TCP 客户端连接到第三台机器,我必须在两个端口之间建立一座桥,就像这样
[modbus slave] -> [4444:bridge:5555] <- [modbus master]
我确实在桥接机器上用netcat尝试过
$ /bin/netcat -lk 5555 | /bin/netcat -lk 4444
它的工作原理是:我可以用我的从设备连接到 4444,用我的主设备连接到 5555,并且流量从主设备流向从设备。然而,我没有看到任何相反方向的交通。在这种情况下如何构建双向桥梁?
提前非常感谢!
您可以使用这样的 fifo 运行 2 个 netcat 实例:
# mkfifo fifo
# nc -l -p 4444 < fifo | nc -l -p 5555 > fifo
您也可以仅使用 socat 来完成。
# socat TCP4-LISTEN:4444 TCP4-LISTEN:5555
顺便说一句,我想运行客户端(需要保持连接)比服务器(仅等待传入连接)消耗更多的电量。也许我错过了一些其他设计考虑。
您可以让连接在任一端断开连接后自动恢复(以便客户端可以立即重新连接)。通过设置 -k 标志来做到这一点。 另请注意,您可能希望使用 -m 参数将两侧的连接数限制为 1。否则,您可以将数千个客户联系在一起! 综合起来:
while [ 1 ]; do nc -lk -p 4444 -m 1 < fifo | nc -lk -p 5555 -m 1 > fifo; sleep 5; done