00:00
各位,我们把前面讲的内容进行梳理。还整理到笔记里面去,往下拉。走起来。嗯。插入。分页。这块我们讲的是TCP粘包和拆包及其解决方案。走一个。首先诶,这个地方怎么又。正文号。首先,我们对TCP粘包和拆包做了基本的介绍,就是它是什么概念,先把概念搞清楚。这样一个概念,就是因为我们TCP协议呢,它本身是没有消息边界保护的,因此呢,它就会出现什么呀,出现粘包和拆包问题。那这里呢,有一张图就把。
01:02
他说的很清楚了,就是示意图。示意图呢,我们拿过来看一下。是不是在这里?这张图。就是TCP粘包和拆包的示意图,还是这个图。把这个图呢拿过来。这边对该图作了说明。对图的说明。我把图的说明呢,也给大家板书这边。放这就可以了,那我这里。插个表格吧,这样好看一点好吧。诶,这边怎么没有编号了呢?啊把这编号看看在这里面能不能加入编号。还可以啊喂,加了这么多编号进去。哦,他是接着那个加的那就。这样写一个。
02:01
整理一下哈。这是第三个情况。对不对,这是我们的第四种情况。好,可以了,这是关于对该图的说明。下边呢,我们是不是为了让大家对它有一个更加形象的认识,我们举了一个例子,就说什么情况下会出现TCP粘包和拆包的,拆包的情况,我们举了一个案例来说明。这样大家对拆包问题就理解的比较形象了。具体的代码在哪里呢?具体的代码是在这个位置。那同样道理,代码有很多对吧,一共有六个文件,显然我就没有办法一个一个粘了,还是老规矩,我们把这个TCP呢,整个这个包给大家压一下,放这。就一个个粘这个太累了。好,放这就行了,好吧,放这。
03:00
放到哪里,放到这边来啊,放到我们的这个位置,具体案例,那核心代码呢,我们可以稍微的整理一下,核心代码在哪里,说一下核心代码。哦,这这个是他全部源码写到这。圆吗?这是全部源码。那核心代码我们找一下。他什么情况下会发生这个问题呢?就是找到这就行了,就说在我们这个地方。如果说我们按照带的buffer这种形式,你来进行一个处理,但是呢,没有进行编码解码,也没有做协议,那这个时候你发了十条消息过去,或者十十十个字符串过去,对吧,你这hello word10个串,你把它做成一个bit buffer发过去,发过去过后呢,你的客户端那边,因为服务器那端,因为不知道到底读取多少,所以说就会出现。这个拆包或者拆包的现象就出现这个问题,好,这边是它的核心代码,我把它拿过来吧,好。客户端的核心代,诶放这客户端核心代码就是我们的my my client。
04:08
K。这个韩德。好,放这儿。还有一部分呢,就是我们。服务器端这块,服务器端端他在接收的时候,其实他没有做任何处理,对不对,他直接按照这个字节来收,他也不知道,所以他整个这个接收的时候呢,完全是靠TCP协议来支撑的,当然就会出现不稳定的情况,好这边是这样子。拿到这边来。这是我们的my server。Handler。知道吧。这就可以了。那紧接着出了这个问题,肯定我们就要提一个解决方案,解决方案呢,就是自定义协议加。编码或者是解码器来解决,那主要的问题要解决服务器端每次读取数据长度的问题。对,把这个问题解决了呢,就核心问题就解决了,好,这是我们的拆包。
05:04
和呃,粘包和拆包的解决方案。把解决方案先写到这里来,好吧。这是我们的解决方案。有了这个解决方案过后呢,我们就按照解决方案的指导思想,我们写了一个具体实例,这是他的要求。这是我们解决,哎,这个地方为什么又这样。下一个。这是我们的要求。要求这边有一个示意图对吧。发送客户端发送五个message,服务器这边呢,收到按照顺序来接收,接收完了过后呢,也回复了五个message对象。啊慢对象。那具体的代码我们写过来。代码演示。还是这样子的,代码演示呢,这块内容就比较多了,我同样还是把源码包拿过来,再把核心的给大家梳理一下就行了。
06:05
这是protocol TCP就是。来解决TCP3包,还有拆包问题。代码放置。全部代码。全部代码。然后呢,核心代码我也给大家梳理到这里来。核心代码。听一下核心代码是不是首先必须要自定义我们的。数据包啊。就是message pro,但名字呢,每个实际开发中肯定都有不一样的,自己呢,根据情况来编写就行了。还有哪块是比较核心的呢?就是这两个一,呃,一个是这边。这边在发送的时候,对吧,在发送的时候,咱们是在这样去发送的,要创建一个协议包。然后再发送。这是它的第二个部分。然后在这边还有一个编码和解码问题。
07:03
客户端出去的时候呢,它会进行一个编码,就是我们的N扣袋。安口。好,我也把这个代码呢放这儿。对,然后他在接收的时候呢,同学们是不是还有个D口。是不是有个D扣段啊,肯定是有低扣的。把这个也放这儿。同样对于我们服务器而言,对于服务器而言,它也会用到dco和N这两个是,呃,客户端和服务器端是可以共用的。然后在服务器端呢,他在接收的时候,它需要干什么呢?他需要按照这种方式来接收,就是因为你服务器端进行。解码过后呢,其实已经形成了message pro,当然这个是规定好的,然后你按照这个方式方式来读取,对不对,就不会在出现数据多读了或者少读的问题。各位,我把它也放到这里。好的,同学们,那关于TCP粘包和拆包问题就先给大家讲解到这里。
我来说两句