5.29—032—周三
Posted chinesehan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.29—032—周三相关的知识,希望对你有一定的参考价值。
今日所学内容
一、半连接数
二、粘包问题
三、解决问题
四、自定义报头
一、半连接数
三次握手没有完成 称之为半连接
原因:
1)恶意客户端没有返回第三次握手信息
2)服务器没空及时处理你的请求
二、粘包问题
为什么会出现粘包问题:
由于使用TCP 流式协议, 数据之间没有分界, 就像水 一杯水和一杯牛奶倒在一起了!
UDP 用户发送数据使用 数据报协议
粘包 仅发生在TCP协议中
1)发送端 发送的数据量小 并且间隔短 会粘
2)接收端 一次性读取了两次数据的内容 会粘
3)接收端 没有接收完整 剩余的内容 和下次发送的粘在一起被下次一起接收导致粘包
无论是那种情况,其根本原因在于:接收端不知道数据到底有多少,不知道两次或多次发送的数据从哪里分界
三、解决方案
先发(提前告知 )数据的长度给接收方,再发送 真实数据,接收方按之前收到的数据长度接收数据
发送端
1)使用struct 将真实数据的长度转为固定的字节数据
2)发送长度数据
3)发送真实数据
接收端
1)先收数据的长度数据 字节数固定
2)再收真实数据 真实可能很长 需要循环接收
在执行过程中,发送端和接收端必须都处理粘包 才算真正的解决了
四、自定义报头
当需要在传输数据时 传呼一些额外参数时就需要自定义报头,报头本质是一个json 数据
具体过程如下:
发送端
1)发送报头长度
2)发送报头数据 其中包含了文件长度 和其他任意的额外信息
3)发送文件内容
接收端
1)接收报头长度
2)接收报头信息
3)接收文件内容
以上是关于5.29—032—周三的主要内容,如果未能解决你的问题,请参考以下文章