5.29—032—周三

今日所学内容

    一、半连接数

    二、粘包问题

    三、解决问题

    四、自定义报头

一、半连接数

三次握手没有完成 称之为半连接

原因:

  1)恶意客户端没有返回第三次握手信息

  2)服务器没空及时处理你的请求

在socket中,socket.listen(半连接最大数量)

二、粘包问题

为什么会出现粘包问题:

  由于使用TCP 流式协议, 数据之间没有分界, 就像水 一杯水和一杯牛奶倒在一起了!

  UDP 用户发送数据使用 数据报协议

粘包 仅发生在TCP协议中

  1)发送端 发送的数据量小 并且间隔短 会粘

  2)接收端 一次性读取了两次数据的内容 会粘

  3)接收端 没有接收完整 剩余的内容 和下次发送的粘在一起被下次一起接收导致粘包

无论是那种情况,其根本原因在于:接收端不知道数据到底有多少,不知道两次或多次发送的数据从哪里分界

三、解决方案

  先发(提前告知 )数据的长度给接收方,再发送 真实数据,接收方按之前收到的数据长度接收数据

发送端

  1)使用struct 将真实数据的长度转为固定的字节数据

  2)发送长度数据

  3)发送真实数据

接收端

  1)先收数据的长度数据 字节数固定

  2)再收真实数据 真实可能很长 需要循环接收

在执行过程中,发送端和接收端必须都处理粘包 才算真正的解决了

四、自定义报头

当需要在传输数据时 传呼一些额外参数时就需要自定义报头报头本质是一个json 数据

具体过程如下:

  发送端

    1)发送报头长度

    2)发送报头数据 其中包含了文件长度 和其他任意的额外信息

    3)发送文件内容

  接收端

    1)接收报头长度

    2)接收报头信息

    3)接收文件内容

猜你喜欢

转载自www.cnblogs.com/Chinesehan/p/10945078.html