我使用以下命令为串行端口创建一对并尝试通过它们发送二进制数据。
sudo socat -d -d pty,link=/dev/tty.vcp0,raw,echo=0,user=myusername,group=staff pty,link=/dev/tty.vcp1,raw,echo=0,user=myusername,group=staff
但是,即使我尝试发送后续二进制文件
数据.bin
0x16 0x16 0x16 0x16 0x16 0x16
(基本上只是一个有 6 个字节的文件,每个字节的值为 0x16)
经过
cat /dev/tty.vcp0 > recv.bin
和
cat data.bin > /dev/tty.vcp1
我得到的只是 3 个字节的 0x16 而不是 6 个。
类似的事情发生在字节 0xF 上。如果我发送一个包含 6 字节 0xF 的二进制文件,我将收不到任何单个字节。
任何人都知道是什么导致缺少 0x16 和 0xF?如何传输包含 0x16 和 0xF 的二进制数据?
其他测试用例:
测试用例 1
发送:
0x16 0x16 0x16 0x0 0x0 0x0 0x0 0x16 0x16 0x16
收到:
0x16 0x0 0x0 0x0 0x0 0x16
测试用例 2
发送:
0xf 0xf 0xf 0x0 0x0 0x0 0x0 0xf 0xf 0xf
收到:
0xf 0x0 0x0 0x0 0x0
我在 socat 命令中添加了 -x 选项,我可以看到显示的数据正确,所以应该是接收端的问题。
PS 以上所有测试均在 Mac OS X 10.9.2 上进行