00:00
我们接着来完成下面的问题,那首先呢,我们找到服务器端。这边呢,我们在对。收到客户端消息过后呢,我们进行一个回复,来我们来回复一些消息,看看服务器端,如果要我们要回复消息给,呃,就是服务器端回复消息给客户端,客户端又怎么去解决TCP粘包和拆包的问题,那我们看一下,首先呢,我们要先写回复的内容是什么,比如说这是response叫什么?Response回复的。内容吧,我叫content都行,那那个message都行,我们叫response content回复的消息,那么就产生一个UUID也是区别random。ID d to street。没问题吧,这是我们拿到的回复的,然后呢,我们把它回复的程度也拿到response。怎么拿到呢?也非常简单,通过刚才的response content.gets。
01:07
对,Gets,然后按照什么呢?我们按照U。按照这个编码的形式来获取它长度就是。我看看这怎么写哈,Get bits。呃,Get的话,这直接写。Utf杠八就可以了。Utf杠八按照一个编码来获取D。拿到了,拿到这样一个程度过后,有了内容,有了程度,是不是我们就可以构建一个协议包了,对,构建一个协议包。协议包。好的,那就六一个message port。VR拿到。对,然后呢,我们把它相关的数据设置进去,Set它的长度就response。
02:01
Response。这个单词不写错了,Response。Response。Onous。拿到就可以了。拿到程度了,然后呢,把内容也给它设置进去,Set content,内容显然就是刚才这个response content。有了。好,这边有一点小问题,我们这边还没有把它进行一个转换,所以说还得转换一把,是不是还有一个什么转换呢,就response。Content。点get bits。Bits啊,这样按照这个。按照这个方式来进行一个获取get bits。写上。UTF杠八对返回是。
03:01
返回一个这样的东西。这边呢,我们要得到一个新的BAT数组。那我就叫response。好的名字,Response。Content。CONTENT2。好吧,把这个名字拿到就行了。然后这边呢,我们要真正填进去的其实是它。没问题吧,就说那这个名字一样的啊,就是这边是基于字节数组的。这边是我这边是一个字符串,这边转成了刺激数组,好可以的。那接着继续往下走,当我们这时已经构建好一个协议包以后呢?下一步是不是就可以把它发送出去就可以了,怎么样Ctx.right andsh把pro发出去?那他想你现在涉及到一个什么问题了,你。现在涉及到的是在回复的时候,你是不是也对你来说,对服务器这边来说呢,他也要进行一个编码。
04:05
对不对,所以说在服务器这个里面,我们要加一个什么呢?加一个编码器。At last。6MY message。Decoder就变成nco,这是一个编码器。编码器。OK。同样到了客户端这边,我们来接收客户端这边,它的单这边需要加入一个什么呀,解码器。At last knew my message。解码器形式就是。这个message口的。这是我们的解码器。加入解码器。OK。加入解码器过后呢,我们在handle这边要对它进行一个读取,所以说要来写一下我们READID0,看看这边是怎么去读取,所以现在呢,我们要做的工作就到了。
05:02
Handler,我们来搜一下。同样道理,首先我们把它的长度先拿到,没问题吧,同学们拿到它的长度,拿到它的长度以后。拉到它的程度以后呢,我们可以来。呃,怎么处理呢?把它数据先取出来对不对,BY。就是msg get content。显然,这个地方返回的是字节数组。拿到拿到过后是不是我们就可以输出客户端接收到的消息了,客户端接收接收到消息如下。消息如下。好。我们首先把长度打出来。对,我们是说长度。长度等于就是刚才已经拿到的认识,再说内容。内容也输出来一下内容,内容等于什么呢?对,我们要把它转成一个字符串,因为你自己数组咱们看不出来是什么东西,对转一下C,按照什么来进行转换呢?Char set。
06:12
Char set。点否。就少了一个逗号,怎么写的?Char set。然后这边写上UTF杠八。拿到了。拿到过后,下一步我们就可以来看看我们接收的次数到底是多少次,好吧,就客户端,客户端这边接收的次数,客户端。接收消息数量。我们也来看一下同样的道理,用加加this count可以了。好,各位同学,那现在呢,客户端也来处理了,客户端这边的。解码器也加剧,我们现在就可以来完整的演示一下关闭。
07:00
把这都关了,呃,这样子快速的close all。来各位朋友,现在看一下服务器端和客户端,它是不是都不会产生一个。TCP粘包拆包问题。跑起来了。抛解过后,我们来运行一把。各种一起看。我们先先客户端,客户端这边它一共调用了五次,没问题吧。诶,他一共调用五次,调用五次以后呢,这边他进行编码,编码过后他就把这个信息发给了我们的服务器端,服务器端先进行deco。Decode完了过后,他把这个数据拿到了,数据拿到以后,看看这边他拿到数据以后,这边又做了一个nco,这个nco方法是什么时候发生的,同学们。这个NQ的方法是不是当他把第一个今天天气冷吃火锅信息拿到过后,他把他就回复了一个消息给我们的服务器,呃,客户端是不是就调用了N扣的方法,然后这个deco呢,又是下一次接收数据。
08:09
是不是相相当于这是一组,这一组完了过后呢,他又发了一个消息回复给客户端,又调了他的NQ的。然后这边又是一组。又是一组,然后呢,又调自己的N客的方法回复一个消息,因此呢,这就是相当于说我的服务器端,服务器端这样理解拿到一个消息包。拿到以后我就给你回一个。对。再拿一个消息包。再拿一个消息包,我又给你回一个。对吧,这样的道理完全正确,那他看我们的客户端当然是这样子的,客户端呢,他把这个信息发出去过后,他就依次接收到了。你看这这边掉了一个decode,依次接收到了服务器端发过来的。这个消息你看,这是一组抵扣的解码达到了,这又是第二个。
09:03
这是第二个,这是第三一个。这是第第四一个,这是第五一个。好,我们再来运行两个客户端,看看是不是非常稳定的,就是五五的关系,就是你那边接收五个包,给我回复了五个message protoc对象。来运行一下。在运行。我再运行下。主要看客户端就行了。我们看到第二个客户端呢,它也是按照这个方式来计收的,五次没有少。第三个客户端他也接收到了五次,也没少说明,目前我们这按照这个流程,就是我客户端发了五个ma包,我服务器呢回了五个都没有出现。粘包和拆包问题,那问题呢就得到解决。其实。还是比较简单的,对不对,但是这就是我们Nike来解决TCP粘包和拆包的解决方案,那么同学们在际发中,实际开发中的时候呢,就按照这个方程来,按照这个方案来解决,就没有任任何的问题。
10:10
好,同学们,那关于这块的内容,我们就给大家讲解到这里。
我来说两句