首先,必须说明的是,粘包问题并不是源于通信协议TCP,TCP是基于连接的安全的协议,不会出现所谓的粘包问题,但这也只是对于流式传输是这样的。但我们需要不定长的分段数据包时,粘包问题就出现了。因此粘包问题是源自于我们的需求,而不是TCP。
解决粘包问题,明确来说,就是解决数据定界问题。我简单想到了以下方案:
- 自定义数据格式,如用特定字符表示包的结束,但是这样需要对每一个字符进行判断,显然效率不高;可以用xml语言格式发送数据,用正则匹配判断是否正确接受。在包头放数据包的一些重要信息,如包长等。