Socket编程 (异步通讯,解决Tcp粘包)
从上一章的通讯中,我们发现如果使用Tcp连续发送消息会出现消息一起发送过来的情况,这样给我们编程造成一定的问题,给我们的信息解析造成一定的问题。那么这篇文章就将针对以上问题给出解决方案......
问题一般会出现的情况如下,假设我们连续发送两条两天记录("我是liger_zql"):
模拟发送示例:
接收端接受两条信息会出现如下三种情况:
1.(1)我是liger_zql(2)我是liger_zql
2.(1)我是liger_zql我是(2)liger_zql
3.(1)我是liger_zql我是liger_zql
通过以上三种情况,显然2、3都不是我们想要的结果。那么如何处理这中情况呢?
解决方案:通过自定义协议...
我们可以以将信息以xml的格式发送出去,列入<protocol>content</protocol>通过正则匹配信息是否完整,如果不完整,我们可以先将本次接受信息缓存接受下一次信息,再次匹配得到相应的结果。
将信息对象转换成一定格式的xml字符串:
对接收的信息通过正则进行匹配处理:
然后将该定义的协议换换成信息对象,通过对象获取自己想要的信息。
最后运行结果如下:
好了Tcp粘包的问题我们解决了。下一章我们将解决Udp丢包的个人解决方案!