00:00
好,同学们,那刚才呢,我们这个地方出现了一个反复的去提示这个什么叫做read p kg hier,这个错误的原因,原因是这样子的。怎样子的呢,是这样子,因为我们这个这个地方。这个server这边呢,它是一直在进行这个for循环的读取,读这个包包,也就是读这读这,那么它其实在反复这个读,读的时候呢,这个地方它会阻塞在这里,前提是对方就是这个con一直是个有效的,就是大家都持有的一个连接才会在这阻塞,所以我写到这啊,就说这个c.read。只有在在什么呢?在这个conn没有被关闭,没有被关闭的情况下,没有被关闭的情况下。情况下才会,诶才会阻塞,阻塞这里就等你,等你输嘛,相当于说等待你这个扣端书才会阻塞。
01:05
是不是,那如果说任意一方,我不管是客户端还是服务器端,有一方关闭这个链接,好马上这个就不玩了啊,如果。如果客户端关闭了,关闭了CN则则就会什么呢?就不会阻塞了,就不会阻塞。那么不会阻塞,就会出现刚才这样一个情况,就是反复的打这个东西,为什么呢?因为他不阻塞,他就读,显然读不到东西,读不到东西他报一个错误,又return到哪去呢?Return到这个地方,那这个错误过后呢,你又说哦,Pack error,然后呢,你又没做任何处理,你又去读,一去读他又他又到这个地方,他又发现又读不到东西,又把这个错误抛出来,然后呢,又回来,所以他反复的打,打。啊,那这个怎么解决呢?解决方案很很简单,就是说当我们这一方读读的时候已经读错了,你可以有两个方案,第一个我你退出我也退出,就大家都相当于说你不玩了吗?他说诶我跟那个客户端正在聊天呢,我说哎你好啊,对方一句话不说这句话,那挂了过后,我这边嘟嘟嘟,我也说你你你不跟我说话算了,我也我也不玩了,我也退。
02:18
我也退对吧,你你不玩了我就退嘛,我就这样子做一个判断,做一个什么判断呢?各位同学我加一个判断,如果A。等于的是。啊,我们看看这个L,它返回的L是什么呀。你看这个方它返回的个自定义错误,是我这自定义的这个错误是吧,是这个错误,嗯,那么这地方怎么判断呢?其实这个地方的L咱们不需要六一个,咱们可以直接把这个程返回去,它这个A应该就是io.u off应该是这个错误吧,那就干脆咱们就先不自定义了好不好,那么我把这个错误信息呢读到这。我就这样子啊,就直接return过后呢,他把这个error给我返回来,返回来过后呢,我在这个地方做一个判断。
03:06
我在哪里做一个判断呢?我在这个循环这地方啊,不着急,我在这这个地方做一个小小判断,如果这个A它就等于io.e of,那么我们就提示一句话,说什么呢?说这个对方关闭了连接。啊,就说客户端,客户端退出了,退出了,退出我也退出啊,我也正常关闭,我服务器,服务器端也正常关闭,端也正常关闭。正常退出啊,其实这个呢也比较正常啊,就叫退出就行了,那退出过后这个地方直接来一个return。来,那你那你这个地方到底是其他什么信息,你也可以再把其他信,假设有别的错误信息,你也把别的错误信息也打出来,也可以好,也可以好,这方呢咱们也可以。好,就是两分两种情况嘛,一种叫做客户端推出了,一种是别的情况。
04:03
好,我把这呢也返回好,这两个都能保证代码没问题,好的,那现在呢,嗯,把这个做完了过后我们再。呃,这地方是什么原因啊,是不是没有导导这个IO包对不对,诶把IO包也导进去,各位朋友,那导进去过后呢,在客户端这个劳务经这边,我们也先暂时不休眠了,但你休眠这个测试我们也做了啊,就你休20秒,你再关掉,它会提示这个信息来玩一把吧。好,我也把看看这个信息对还是不对,好吧,对还是不对,来各位同学来做一个小测试啊。首先把server端编一下,一。然后呢,把我们客户端再编一下一。OK,那启动我们的12端。好,再启动我们的C端。好,现在看效果走一。好,假设输了一个100密码,有个汤姆走。
05:01
大概。他在读取,因为你现在没发了,我也不退,它相当于卡在那个地方的,卡在了瑞的地方,因为大家这个连接都还持有,大家都还持有,我没关,你也没关好,这个家伙20秒就关了。再看消息,看看动作啊。20秒过后,看他怎么提示信息。看诶,你看这么。Read package error,但是没有把那个信息打出来呢。那这个错误还不是那个错误哈。这个错误还不是刚才那个错误呢。那么刚才那个分析的还有问题。那这个错误信息到底是什么呢?这个错误信息它就是。他这个错位信息就是red package head error。哎,是不是我没我没有保存呢,怎么感觉。哎,等等一下啊,等一下不着急,是什么原因,我这儿不是已经。诶,刚才我是怎么玩的。
06:02
嘿,我这个是刚才自己没没有注销吗。我我记得我注销了呀。哦,我注意要的,嗨,我怎么发生灵异事件了,这个啊,搞得我再来一次。那发生了灵灵异事件了,还有哪地方有问题?艾是因为不要了。哎,我说怎么回事啊,对不对,好,再来一次啊,同学们再来一次。再来一次最后的疯狂,最后的疯狂走。来,跑起来。跑起来,再来看一下,走。好运行一。100ABC好等待,现在呢,他应该报一个正常退出,因为我现在返回它是自自己的L。好,自己的L点一下。好,等待。看这个数信息啊,同学们。
07:00
好。我们看一下效果,诶果果然如此啊,跟我们分析的是一样,他说客户端推出了,服务器端给退出好了,我把这个代码呢,先给同学们整理一下啊,整理一下,你看这个写了半天,写了这么一点东西,写了这么一点东西,把这个逻辑捋清楚,这个代码呢,我们是这样写的,各位朋友怎怎么写的呢?不着急啊,首先呢,我们是。呃,先先写的客户端这一头,写客户端这头,我们其实就加了这么一点东西。加了这么一点东西对不对,就是相当于把消息本身也发过去了,所以说其实在这做了一点修改。里面的这个logging.go我们做了一些修改啊,做了做了修改,修改了哪里呢。我修改的代码其实就在这里,而且我们也证明了一个观点,就是这个close close一个连接会导致什么情况发生?
08:02
好,这一句是我们在这加的。好,这是我们改动的第一个地方,第二个地方改动的比较大的地方呢,就是在服务器端。服务器端,为了这个比较方便呢,我们将读取包包这个任务封装到了一个呃,Package里边,好,所以说这地方呢,做了一些相应的改动,做了一些相应的改动。好,把它也整理起来。在这做了一些相应的改动,哪里呢,就是process。我做了一些相应的改动,也把它拿过来。好,这是我们改动的第二个地方。啊,就是我们这个server。Server这边呢,就是,呃,这个叫做may。Main点购也做了修改。修改。修改的地方呢,第一个就是这个文件。
09:00
就我们点够好,把它这个修改的地方先拿过来,一个是这儿还有一个呢,我们增加了一个函数,就是将将读取的任务,将读取包的任务啊,读取包的任务封装到了,封装到了一个函数中。一个函数中啊,OK,那么这个函数呢?我们写的是read begin啊,稍等片刻,它应该又在保存啊,OK。Okay。Re package。Read p kg,那具体来说这个函数是怎么写的呢?是在这里写的。在这儿。好排,可这个函数呢,稍微有点多。啊,把它封装起来了。好的好。来,我把它给大家剪辑一下。Red packet。从这开始到36行。对,36行,各位。
10:00
然后呢,36行咱继续往下看,各位同学好的,37行,对37行到这结尾。好,这是我们这个read p kg这个函数的一个说明,好了,那关于这个功能的实现呢,我们就先给同学们介绍到这里。
我来说两句