使用 socat 创建 UDP 到串行桥

使用 socat 创建 UDP 到串行桥

我有一个通过 UDP 连接传输数据的软件。然而,在我们的系统中,我们只能通过串行端口传输数据。我正在考虑使用 UDP 和串行之间建立一座桥梁socat。不过我对它不是很熟悉。尝试过一些教程,但它们没有帮助。也尝试阅读手册,但也没有帮助。

我找到了一个例子在这里,并根据我的需要进行了调整。这是我的嵌入式系统上的内容(它有一个静态IP)

$ socat -v udp4-datagram:172.24.176.207:54321 \
   open:/dev/ttyS0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl

这是我的主机上的内容(也有静态 IP)

$ socat -v udp4-datagram:172.24.176.116:54321 \
   open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl

你得原谅我,但我总体上是socat文盲networking

一些评论和问题。

  1. 这是什么open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl意思?我在哪里可以找到它的描述?我明白了/dev/ttyUSB0b115200,但是剩下的是什么?
  2. 在嵌入式系统(172.24.176.207)上我运行了一个netcat服务器:

    $ nc -ul 172.24.176.207 54321
    

    在主机上我发送了一个 UDP 数据包:

    $ echo -n "hello" | nc -4u -w1 172.24.176.207 54321
    

    但什么也没发生。我缺少什么?

答案1

回显服务器设置

我曾经socat像这样设置 UDP 回显服务器:

回显服务器
$ socat UDP4-LISTEN:54321,fork EXEC:cat
回显客户端
$ echo -n "hello" | nc -4u -w1 192.168.56.101 54321
hello

TCP转储提示

调试此程序时,我喜欢监视网络,因此将运行此程序来监视“回显服务器”

$ tcpdump -i any -vnn port 54321
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
22:33:21.280053 IP (tos 0x0, ttl 64, id 8684, offset 0, flags [none], proto UDP (17), length 33)
    192.168.56.1.62439 > 192.168.56.101.54321: UDP, length 5
22:33:21.282140 IP (tos 0x0, ttl 64, id 40761, offset 0, flags [DF], proto UDP (17), length 33)
    192.168.56.101.54321 > 192.168.56.1.62439: UDP, length 5

笔记:可以对上述技巧进行大量修改,以调试 socat/nc 服务器与其客户端之间发生的任何情况。

理解 socat 论证

我也找到了配置socat 筋疲力尽有时。但就像其他事情一样,如果你把它分解成更小的部分,它就更容易掌握。

$ socat -v udp4-datagram:172.24.176.116:54321 \
   open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl

所以前两个开关应该有点明显:

  • -v- 冗长
  • udp4-datagram:172.24.176.207:54321- UDP监听端口54321
  • open:/dev/ttyUSB0- 设置发送输入/输出到您的 USB #0 设备
  • raw- 原始模式,传递未处理的输入/输出
  • nonblock- 以非阻塞模式打开/使用文件
  • waitlock=/tmp/s0.locak- 创建一个等待锁文件 - 防止socat多个
  • echo=0- 禁用服务器上的本地回显
  • b115200- 将波特率设置为 115,200 位
  • crnl- 将换行符从 转换\n\r\n

顺便说一句,如果您查看socat手册页,会有很多示例。还有上述开关的完整描述。

参考

相关内容