我用来socat
将传入的串行流量转发到本地 UDP 端口(在 macOS 上):
socat OPEN:/dev/cu.usbmodem13203 UDP:localhost:12345
我认为串行设备是流接口,而 UDP 是基于数据包的,因此不存在明确的正确答案在哪里或如何引入数据包边界。在我的测试中,每个字节都作为其自己的 UDP 数据包转发。例如,当发送字符串“XYZ”时,我的测试服务器输出:
Datagram: X
Datagram: Y
Datagram: Z
为什么字节序列会被分成几个数据包?其背后的机制是什么?有什么办法可以控制这种行为吗?
根据评论,
socat
只要文件描述符上有可用数据,总是会立即读取和转发数据,并且此行为并不意味着是可配置的。因此,这取决于内核和(设备)文件或底层驱动程序的类型,并且不受其
socat
自身控制。