mina中的Tcp粘包,半包的问题
Posted 健康平安的活着
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mina中的Tcp粘包,半包的问题相关的知识,希望对你有一定的参考价值。
一 tcp与udp
1.1 tcp与udp的概念
TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因 此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。即面向流的通信是无消息保护边界的。
udp: 用户数据报协议)是无连接的,面向消息的,提供高效率服务。不会使用块的合并优化算法,, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收 端来说,就容易进行区分处理了。 即面向消息的通信是有消息保护边界的。
1.2 tcp的粘包,半包
1.3 原因
1.4 解决办法
1.定长的方式:数据不够,用数据符号填充,在解包的时候,判断满足长度解包。
2.特殊字符开头和结尾,作为界定范围。
3.消息报文:制定固定格式:头部(长度,版本号)+消息体
以上是关于mina中的Tcp粘包,半包的问题的主要内容,如果未能解决你的问题,请参考以下文章