使用GatewayWorker遇到TCP粘包问题

啊哒梨

使用GatewayWorker,设备使用TCP协议进行连接,连接同一端口。

设备本身一共有 3 种设备协议可供选择

  • 其中两种设备协议发送的数据有不同的开始和结束标记,并且开始结束标记是ASCII控制符
  • 另外一种设备协议发送的数据没有开始结束标记。

现在设备传输数据出现了粘包现象,想到了定制协议。设备发出的数据没办法进行修改。

  • 最开始想到的是text协议。但是设备发出的数据没办法修改(比如加个 "\n"),那是不是这样就不能用text协议了?

我该从哪里下手呢?

阅读 2216
1个回答

walkor

没有开始结束标记就没办法解决粘包问题,除了更改协议,其它几乎无解

  • 啊哒梨 2017-11-10

    那另外2种协议需要分别定制吗?

  • walkor 2017-11-10

    最好是分两个端口,每个端口一种协议,这样代码互相不影响。如果你能根据数据区分出是哪种协议,也是可以一个端口的,都写成一个协议文件解析。

  • 啊哒梨 2017-11-10

    好的。谢谢walkor大大

  • 啊哒梨 2017-11-10

    @1:那像我这种设备数据无法修改的情况下,是不是也没办法使用 frame 协议(总包长+包体)?

  • walkor 2017-11-10

    没办法