TCP中粘包/分包问题_鹿姐的狗哥的博客-程序员ITS301_tcp分包粘包

技术标签: tcpdump  


我们在使用TCP协议进行数据的传输时,会出现粘包与分包,只是由于内部的优化机制所导致的。
换句话说:
粘包与分包是以用Socket在TCP协议下内部的优化机制

1 什么是粘包

例如我们在向服务器传输数据时, 尤其是在频繁的发送一系列琐碎数据时,系统不会立马将消息发送到服务器端,而是会将这些琐碎细小的数据进行粘念结合,形成一个大数据后,才会发送给服务器端。
此时的服务器端只会调用一次receive方法然后一次性接受多个数据的整合

2 什么是分包

了解了粘包,就很容易理解分包了。
当我们一次性发送一个超大数据的时候。这时候系统就会对这条数据进行分包,将这条超大数据拆分成多个小数据进行发送。
在传输过程中,当发送失败进行重新发送时,大数据不仅占用时间,还占用网速。
此时,服务器端就不会像粘包一样只调用一次receive。若拆分成了十个小数据,则会调用10次receive方法

3 分包与粘包问题的演示

3.1 粘包

 for(int i = 0; i < 100; i++)
                clientSocket.Send(Encoding.UTF8.GetBytes(i.ToString()));

在这里插入图片描述

3.2 分包

这里需要一个极大的数据。这里就暂时不去弄了。

注意:以上测试是在异步环境下进行的。

4 解决分包与粘包问题

这种优化固然是好事,能在效率上给我们带来极大的提升。
但是在游戏的开发中,我们通常会频繁的发送一些琐碎数据,比如位置更新信息。这时候我们必须清楚的知道一个包里包含了多少条位置信息,这样才能对这些位置信息进行有效的处理。
如下:我们可以将数据进行分割。
前面代表我们固定每次所接收数据的长度,后面则是有效的数据。
每次接收到数据时就去检测,是否达到长度(4),达到了,则处理,未达到,则继续接受到程度为4为止。

4 XXXX
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TakahashiRyosuke/article/details/107644007

智能推荐

spring security 4.0 步步深入 1-4_blurooo的博客-程序员ITS301

本教程的后面部分提供了对Spring Security框架架构和实现类的深入讨论,当有需要进行一些深度的自定义时可以着重阅读。在这一部分,我们将介绍Spring Security 4.0,简要概述它的历史,并稍微考虑一下如何开始使用框架。此外,我们将看看命名空间配置,它提供了一种比传统的Spring bean方法更简单的保护应用的方法,你再也不必单独连接所有实现类。我们还将查看可用的示例应用程序。尝试运行并实验这部分

尚硅谷 SpringCloud 第二季学习笔记【已完结】_yfstart的博客-程序员ITS301_尚硅谷springcloud第二季

SpringCloud一、介绍(一)cloud和boot之间的依赖关系https://spring.io/projects/spring-cloud#overviewFinchley 是基于 Spring Boot 2.0.x 构建的不再 Boot 1.5.xDalston 和 Edgware 是基于 Spring Boot 1.5.x 构建的,不支持 Spring Boot 2.0.xCamden 构建于 Spring Boot 1.4.x,但依然能支持 Spring Boot 1.5.x

Spring MVC异常统一处理(包括普通请求异常以及ajax请求异常)_lch_2016的博客-程序员ITS301

转自:https://www.cnblogs.com/bloodhunter/p/4825279.html关键字:HandlerExceptionResolverHandlerExceptionResolver仅有一个接口方法:ModelAndView resolveException(HttpServletRequest request, HttpServletResponse ...

Oracle导出表(即DMP文件)的两种方法_lanpy88的博客-程序员ITS301_plsql导出dmp文件

方法一:利用PL/SQL Developer工具导出:菜单栏---->Tools---->Export Tables,如下图,设置相关参数即可:方法二:利用cmd的操作命令导出,详情如下(备注:方法二是转载网上的教程):1:G:\Oracle\product\10.1.0\Client_1\NETWORK\ADMIN目录下有个tnsname.or

随便推点

ARM Cortex M3 启动文件分析_yxyy3604的博客-程序员ITS301

Stack_Size      EQU     0x00000200                     这里相当于C语言里面的宏AREA  STACK, NOINIT, READWRITE, ALIGN=3   声明一个名为STACK的可读写段,8字节对齐Stack_Mem    SPACE   Stack_Size                          开辟

比 MyBatis 效率快 100 倍的条件检索引擎,天生支持联表!_xhmj12的博客-程序员ITS301

开源项目简介比 MyBatis 效率快 100 倍的条件检索引擎,天生支持联表,使一行代码实现复杂列表检索成为可能!2开源协议使用Apache-2.0开源协议3界面展示你的产品给你画了以上一张图,还附带了一些要求:检索结果分页展示可以按任意字段排序按检索条件统计某些字段值这时候,后台接口该怎么写???使用 Mybatis 或 Hibernate 写 100 行代码是不是还...

WebMvcConfigurationSupport没有生效的问题_Apollo的小太阳的博客-程序员ITS301

问题:程序中想使用swagger2看看接口是否都正常,但是,输入http://localhost:8080/swagger-ui.html总是提示404。而通过postman来请求,都是可以的,推测swagger配置有问题。前端页面错误如下(提示找不到页面):Whitelabel Error PageThis application has no explicit mappi...

DHCP常用配置文件参数说明_雅二二的博客-程序员ITS301_dhcp配置文件

subnet 192.168.2.0 netmask 255.255.255.0 {range 192.168.2.100 192.168.2.254;(网段)option domain-name-servers 192.168.2.1;(DNS)option domain-name "test.cn";(域名)option routers 192.168.2.1;(默认网关)option bro...

react打包压缩js\css\img_YoungSir_的博客-程序员ITS301_react压缩js

前言本文基于 “react”: “^16.13.1”,“webpack”: “4.42.0”,“antd”: “^4.4.0”,同时借鉴了其他博主的文章,只为做个记录,下次好参考,原文链接在这里 :https://blog.csdn.net/weixin_43233914/article/details/106789577, 原文连接在这里:https://blog.csdn.net/lsvtogergo/article/details/81348934。开启gzip压缩js/css使用插件 co

解决pycharm终端/cmd运行python脚本报错“ImportError/ModuleNotFoundError:No Module named ...”_Loki97的博客-程序员ITS301

问题项目结构如下:整个项目名为project package1和package2是项目文件夹下的两个文件夹,即两个包(package) 两个包中分别有__init__.py 和 module1.py / module2.py文件,其中module1.py和module2.py文件为两个模块(module)(在python中一个文件可以被看成一个独立模块,而包对应着文件夹。区别包和...

推荐文章

热门文章

相关标签