zoukankan      html  css  js  c++  java
  • TCP粘包和拆包

    什么是粘包和拆包?

    当发送包同时发送两个数据包时,接收包只收到了一个数据包,其中包含了两个数据包的信息,这种现象为粘包。这种情况下,接收方无法分清两个数据包的界限,很难处理

    当发送包同时发送两个数据包时,接收方也收到了两个数据包。但是这两个数据包,一个是不完整的,一个是多出来一块,这种现象为拆包。

    为什么会发送粘包和拆包?

    • 要发送的数据包大于TCP发送缓存区剩余大小,就会发生拆包
    • 要发送的数据包大于最大报文长度,就会发生拆包
    • 要发送的数据包小于TCP发送方缓冲区剩余大小,就会发生粘包
    • 接收方的应用未及时读取接收缓存区剩余大小,会发生粘包

    如何解决?

    消息定长:

    发送方将数据包设置为相同的长度,这样接收方每次都将接收缓存区的数据按相应长度进行拆分

    设置消息边界:

    接收方就可以通过消息边界将数据分隔开

    将消息分为消息头和消息体:

    在消息头中包含消息长度

  • 相关阅读:
    Element Plus表单resetFields重置表单无效
    thinkphp6通过中间件设置跨域
    centos7安装jdk
    面试
    行测-逻辑填空
    行测-语句表达
    行测-片段阅读
    行测-四大文明古国
    基于 OAuth2.0 协议的单点登录系统方案设计
    性能测试知识点+流程
  • 原文地址:https://www.cnblogs.com/ashen1999/p/12739131.html
Copyright © 2011-2022 走看看