Socat 到 UDP 服务器截断最后一个字符

问题描述

所以我正在研究一个串行到 UDP 的网关,将销售点打印机连接到 NVR,该 NVR 可以覆盖相机视频上的交易(当 POS 设备在串行打印机上打印时,该设备接入串行数据到打印机,然后在 NVR 屏幕上您将看到串行打印机的文本。

这是我目前的代码

/usr/bin/socat -d -d -d -u file:/dev/ttyUSB0,b19200,nonblock exec:/usr/bin/strings |/usr/bin/socat -d -d -d -u - udp:10.0.1.3:37777,reuseaddr,sourceport=51470,reuseaddr

一个 Socat 实例读取进入打印机的数据。将其传递给字符串以剥离非 ascii 数据,然后第二个 socat 实例将其传递到 NVR。

这工作正常,但是在 NVR 上,由于某种原因,它缺少每行中的最后一个字母。它可能正在阅读换行符,并以某种方式忽略最后一个字符。我需要做的是弄清楚为什么要这样做,或者可能更简单,只需在换行符之前添加一个虚拟字符即可。

这是第一个 socat 和 Strings 产生的

    Thank you please call again
    Gratuity........................
    Total...........................
    Please Do Not Accept Any
    Hand Written Changes
    To This Bill !!!

这是 NVR 打印出来的内容

    Thank you please call agai
    Gratuity.......................
    Total..........................
    Please Do Not Accept An
    Hand Written Change
    To This Bill !!

一个 socat 和字符串产生的十六进制转储是(我认为 0A 是换行代码

00005030: 323a 3139 2054 6f74 616c 2044 7565 2020  2:19 Total Due
00005040: 2020 2020 2020 1b21 2032 3033 332e 3030        .! 2033.00
00005050: 1b21 000a 1b76 1b45 000a 1b45 0020 201b  .!...v.E...E.  .
00005060: 4500 2020 2020 5641 5420 2020 2020 2020  E.    VAT
00005070: 2020 2020 2020 2020 2020 2020 2020 2020
00005080: 2032 3635 2e31 370a 1b76 1b45 000a 1b45   265.17..v.E...E
00005090: 0020 201b 4500 2020 2020 5468 616e 6b20  .  .E.    Thank
000050a0: 796f 7520 706c 6561 7365 2063 616c 6c20  you please call
000050b0: 6167 6169 6e0a 1b76 1b45 0020 201b 4500  again..v.E.  .E.
000050c0: 2020 0a1b 761b 4500 2020 1b45 0020 2020    ..v.E.  .E.
000050d0: 2047 7261 7475 6974 792e 2e2e 2e2e 2e2e   Gratuity.......
000050e0: 2e2e 2e2e 2e2e 2e2e 2e2e 2e2e 2e2e 2e2e  ................
000050f0: 2e0a 1b76 1b45 0020 201b 4500 2020 0a1b  ...v.E.  .E.  ..
00005100: 761b 4500 2020 1b45 0020 2020 2054 6f74  v.E.  .E.    Tot
00005110: 616c 2e2e 2e2e 2e2e 2e2e 2e2e 2e2e 2e2e  al..............
00005120: 2e2e 2e2e 2e2e 2e2e 2e2e 2e2e 2e0a 1b76  ...............v
00005130: 1b45 0020 201b 4500 2020 0a1b 761b 4500  .E.  .E.  ..v.E.
00005140: 2020 1b45 0020 2020 2050 6c65 6173 6520    .E.    Please
00005150: 446f 204e 6f74 2041 6363 6570 7420 416e  Do Not Accept An
00005160: 790a 1b76 1b45 0020 201b 4500 2020 2020  y..v.E.  .E.
00005170: 4861 6e64 2057 7269 7474 656e 2043 6861  Hand Written Cha
00005180: 6e67 6573 0a1b 761b 4500 2020 1b45 0020  nges..v.E.  .E.
00005190: 2020 2054 6f20 5468 6973 2042 696c 6c20     To This Bill
000051a0: 2121 210a 1b76 1b45 000a                 !!!..v.E..

感谢您的帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)