第一篇博客 本博文非专业博文: 另引自百科(百度汉语百科): 粘是多音字,读音为zhān和nián。 读作nián时,词性是形容词,指具有粘性,另外,粘氏原本是女真族。 读作zhān时,词性是动词,指黏的东西互相连接或附着在别的东西上;用胶水或糨糊等把一种东西胶合在另一种东西上。 正文: 本博文主要 ...
分类:
其他好文 时间:
2020-06-20 21:30:39
阅读次数:
133
一、什么是粘包拆包? 粘包拆包是TCP协议传输中一种现象概念。TCP是传输层协议,他传输的是“流”式数据,TCP并不知道传输是哪种业务数据,或者说,并不关心。它只是根据缓冲区状况将数据进行包划分,然后进行传输。 在这个前提下,就有可能发生发生同一个业务数据被分割程多个数据包,或者多个业务数据被打包到 ...
分类:
其他好文 时间:
2020-06-20 16:37:03
阅读次数:
48
Netty4 自定义Decoder,Encoder 首先我们必须知道Tcp粘包和拆包的,TCP是个“流”协议,所谓流,就是没有界限的一串数据,TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际数据进行包的划分,一个完整的包可能会被拆分成多个包进行发送,也有可能把多个小的包封装成一个 ...
分类:
Web程序 时间:
2020-06-15 13:48:07
阅读次数:
79
使用的协议是tcp,由于tcp协议传输数据的时候会有粘包现象,所以为了解决消除这个现象,又编写了两个工具函数Encode和Decode 消除粘包现象的方法是在自定义一个应用层协议,他的内容为每次发送的数据包的前4个字节表示数据的长度,然后后面才是真正发送的数据 首先是工具包: proto.go pa ...
分类:
编程语言 时间:
2020-06-01 13:49:25
阅读次数:
69
比如recv(300) 设置接收300个字节 但是数据有350个字节 第一次接收300个字节之后 还有50个字节放在了输入缓冲区中 下次再执行send时 只是接收了上次存在缓冲区中的50个字节 ...
分类:
编程语言 时间:
2020-05-22 16:49:56
阅读次数:
59
一、netty 为啥要进行拆包粘包处理 简单点描述,netty底层通讯是走的TCP协议,接收到的都是字节流,然后以字节字节队列的形式存在缓存堆里面。而TCP协议每一次最大接收的字节长度是1024个字节,一旦超过这个长度,那么就会出现一下各种形式: 所以在字节长度超过1024的时候,一个完整的包可能会 ...
分类:
Web程序 时间:
2020-05-18 16:02:45
阅读次数:
70
Netty 底层是基于 TCP 协议来处理网络数据传输。我们知道 TCP 协议是面向字节流的协议,数据像流水一样在网络中传输那何来 “包” 的概念呢? TCP是四层协议不负责数据逻辑的处理,但是数据在TCP层 “流” 的时候为了保证安全和节约效率会把 “流” 做一些分包处理,比如: 1. 发送方约定 ...
分类:
Web程序 时间:
2020-05-17 13:11:43
阅读次数:
78
1、采用TCP自定义协议通讯,协议由02(byte) + json字符串(byte[]) +03(byte)组成。 Socket_Client.cs 服务端using System;using System.Collections.Generic;using System.Net;using Sys ...
1 TCP 粘包和拆包基本介绍 1) TCP 是面向连接的, 面向流的, 提供高可靠性服务。 收发两端(客户端和服务器端) 都要有一一成对的 socket,因此, 发送端为了将多个发给接收端的包, 更有效的发给对方, 使用了优化方法(Nagle 算法) , 将多次间隔较小且数据量小的数据, 合并成一 ...
分类:
Web程序 时间:
2020-05-04 00:28:47
阅读次数:
73
两种粘包现象 1 连续的小包可能会被优化算法给组合到一起进行发送 2 第一层次如果发送的数据大小为2000B,接收端一次性接受大小为1024B,这就导致剩下的内容会被下一次recv接收到,导致混乱 解决方案一. 由于双方不知道对方发送数据的长度,导致接收的时候,可能接收不全,或者多接收另外一次 发送 ...
分类:
其他好文 时间:
2020-05-02 14:45:49
阅读次数:
66