00:00
同学们下午好啊,我们开始下午的课程,那上午呢,我们留了一个作业对不对,这个作业呢,就是要求大家在老师的一个基础上呢,完成一个可以循环的输入。内容,然后呢,在终端可以,呃,在终端一行一行的输,最后呢,输出一个it的时候就表示退出,那么把这个功能呢,咱们做一个小小的完善,非常简单啊,那打开我们这个图,那其实这块呢,只要做一件事情,什么事情呢,就说你在这地方不要退出了,你别发完一条你就跑了。所以说我们这应该在客户端这边呢,要做一个for循环没问题,打开我们的这个connect go在这里,在哪里把它for循环起来呢。这个不需要了。是不是read,是这个地方应该for循环。For循环走起来。然后呢,把它包起来,从这包到哪里呢?这句话不要了,打不打这个句话无所谓。
01:03
好,从这把它包起来。啊,把它包起来。对的。稍等,稍微整理一下。是吧,诶表示力想往这边挪一挪,各位朋友往这边挪一挪。走。那么这个时候把它包起来以后呢,咱们有一个事情啊,就说你现在在发送的时候,我们看。你在不停的往往这边发送的,你这写了一句在发送。没法退出。没法退出,所以说我们在这应该做一个判断,当用户输入的内容是一个access时候,关键字的时候,我们就退出做一个判断。如果用户输入的是什么呢?Exit就退出。就break出来吗?那就做判断。怎么说let等于?这个指引。然后呢,我们就break。
02:01
这边你可以写一句话,就说客户端退出了。客户端退出了。爹。Print。就从客户端退出。那我问大家,我这样写对不对,有问题没有。哪里又错了呀,同学们。啊哎,这这这这个地方写错了,不是不这样啊呃,逻辑上哪里有写错了。肖剑能看出来吗?我哪洗漱了?这个地方为什么会错呢?哦,他说这个N没有用过是吧,这个N没有用,可以可以去掉。你这个N对我来说没有什么用。啊,那这个是不是也要去掉了,因为上面area有定义过。我这样写行不行啊,同学们。我这样不行,因为为什么呢?因为你这样读的时候,本身它带了一个斜杠板。所以说你是不是要去这样比较的时候,你应该先把这个这个难进行一个处理,把它这个什么呀,把这个去掉一下,大家还记不记得怎么去掉。
03:07
非常的简单,我们有一个string。点什么?Tri对,所谓进行trim对这个name trim什么呢?把它的这个斜杠N给去掉,但有些地方可能还有斜杠R,如果有斜杠R,斜杠N都去掉,甚至把空格也给去掉。大家应该还记得,然后呢,我接收一下。对,我接收一下。好,这样就可以退出了。但我如果。如果这样退出,呃,做的话呢,我需要引一个包包。我这样做的话,同学们想客户端服务器端那边有没有问题。服务器的,那有没有问题,所以说你在写这边代码的时候,你要同时考虑server,因为你这样比较可以把这个退出,但是你会发现另外一个情况来看一下。来,你看这个好稳定是吧,他这地方都一直没退出。
04:04
好,Server跑起来来,我们看这个时候呢,我可以循环的输东西了,好的各位朋友跑一下。大家看到啊,会出现一个很奇怪的现象。哈。ABC。你看这边这地方,他不停的在在这等待,看到没有正确的吧,YYY。北京。也输出来了,但是这个信息在这在这个服务器这段呢,老是这样提示肯定很不好,因为他这不停说等待你的输入,因为我只要不回车,他就一直说等待。所以说我们第一个事情呢,要把这处理一下,把我们server这个提示信息去掉。好,这地方去掉,去掉过后我们再来看效果。好,去掉了,跑起来。好,这边我退出走。哎,在这啊。在这儿走一下。
05:02
运行一下我们的客单端,输出hello。Hello world回车,然后呢,北京你好。回车,诶,怪不怪。怪不怪?为什么?为什么那边没有换行啊。是因为你去掉了是吧,所以说你去掉过后呢,你得想一个办法,你得把这个再加上,在哪加呢?因为你你你这个现在确实可以退出了,就是说你客户端你这样写。可以退出,但是呢,你每次发的时候没有带这个换行,没有带这个换行肯定不好,怎么办呢?咱们在这写的时候,把这个换行给他带过去。这样就可以斜杠。嗯,好,这样代码就写完了,再看一下。跑一下我们的这个口端啊。跑下客户端。好,我们来玩一把。
06:00
诶。哇,你看他这个又把我这个当成当成一个病毒了。说说这个360很很诡异,就说有时候他莫名其妙的它会。他他有时候他是相信这个,有时候他又不行,不知道为什么。啊,不知道为什么他会出现这么一个情况,来吧。我们再来玩一把,刚才我已经退出了,所以说我还要进到我们的客户端打开D盘。Go project src go code,然后呢,这边有一个18TCP,还有一个client,进到这个client。CD好,CD过后呢,我们来写一句话。好连到这边去啊,就是go。Go,然后呢,我们写的刚才那个程序叫。好,同学们看到我现在连上了啊,我现在已经连上了,大家看已经连上了,我开始来输东西。哈喽。
07:01
Wow哈,OK。飞车,你好。飞车啊,大家好。啊。Yes,好,这是一个人在这聊,我再起一个啊,同学们,如果我再起一个,看他能不能接收,现在相当于有两个客户端连到他了。大家可以看到,现在我有两个客户端,这有一个客户端,这还有个客户端,两个都是给它处于一个连接的状态。那现在呢,我用这个再连连接它一下,看效果啊同学们。好,我这边可以可以再连。Go。RA me a。大家看,我又连上了。啊,我又连上了,他说有一个连,又又有一个客户端连上来,好再写这边写ABC。好ABC走UU,那这个时候我在这边写的时候呢,它这边也可以接收到,比如说我写1234567对吧,你看这样子它就可以区分,比如这是B。
08:09
B,呃,C啊,What's your name what。好,你看这边也可以,这边假设是AA说啊啊大家好。你看他都接收到了,他也就是现在呢,我们其实已经完成了这样一种,就是两个客户端。然后呢,到这个服务器端,由服务器端起了两个不同的携程为我们服务,然后呢,我这边可以退出,我这边也可以退出,看到我一退出这边服务器也能捕获到这个消息,它是怎么捕获到的呢?大家看我退出。他说有一个退出了,他退出的理由就是因为他在读的时候发现你有一个远程的服务器啊,远程的主机关闭了这个连接。也就他可以通过这个判断,当然这边也是一样道理,退出。
09:04
客人对,说他又拿到一个信息,这个信息因为我没换行,所以说他打了一个地方的啊,打了一个地方的,好,这个呢,第一个这个小案例,咱们就完成了,那同学们今天晚上的作业啊,今天晚上呢,就是同学们在这个呃,晚上的时候要做的一个作业,就是在我这个基础上完成什么呢?就是上午说的这个事儿。哪个事情呢,大家看看到就是把它完善了,把它完善了,让他可以进行一个简单的对话,简单对话好,那我再问大家一个问题,如果我给你们出一个题,我给大家做一个扩展,目前我们的这一个结构是这样子的,是A客户端。跟服务器进行交互,我现在要求大家考虑一个情况,就是说我希望。这个A和B它们之间发生一个交互。
10:00
A和B之间发生一个交互,当然直接这样对接行不行呢?不行,如果这样对接的话,那说明你这个B也必须是一个服务器,这样肯定不能这么玩。那怎么做呢?大家想一想。大家想一想,这个你能不能完成呢?那显然这个服务器的。功能就要增加了,就说我在这说一句话,我能够跟他对话。那相当于说我把一句话发给了这个携程。这个携程要想办法拿到这个携程的。连接。然后把这句话通过这个链接噌的一下发给他。是不是这样就可以了呢?当然可以,那就意味着我们这个连接如果你能拿到就搞定了。是不是就这样子的,那同学们晚上可以去简单想一想怎么完成,那说白了,说白了你这个地方要要有一件事情去做,就是你的服务器这边要去想办法,在这里我们有这个connect。
11:05
这个connect,这个connect怎么去做,当我连到一个时候。我怎么去标识?不同的这个。就是我能知道,诶,你给我发了过后,我希望能够转过去。我能够转过去,这个大家晚上可以动动脑筋,但是后面我也会去讲,你们先动动脑筋,能不能实现这个小功能,就是我可以呃,有两个或者三个,他们中间可以点对点的进行一个。绘画啊,点对点的进行一个规划,这样大家先先先琢磨这个事啊,琢磨这个事,那这个呢,只要你想明白了,应该是可以做出来的,就说你你现在现在关键点就说你能不能拿到。在这个呢,在这个地方,在这个鞋子里面拿到这个连接。拿到这个链接,这样就好办了。啊,这样就好办,怎么去做这个事儿,大家先琢磨一下啊,先琢磨一下好的,这个留一个思考题在这吧,留一个思考题在这儿,大家有思路没啊,想一想啊,我希望同学们在老师没有评讲之前呢,也能够啊,有一部分同学能够有一个思想好了,那关于这个功能的完善呢,我们就先说到这儿,我们把这个东西给大家板述一下,我改了哪里呢?其实我就在客户端这边做了一点小小的修改。
12:23
在哪里加那了,说白了就这。就在这个地方做了一段代码处理,其他地方完全没有动。哦哦,这还加了一个这个好,我把这个改进的地方进行一个处理啊。对。对代码的一个改进,对哪里呢?准确讲是对client。对,我们只对c.go做了一个改进。好。点购做了改进。对了,做了改进,那么具体的改进的代码是在哪里呢?是在这个位置。
13:00
好的,我截取了哈,各位朋友。来。具体来说,我改进的地方就是这。一个是这儿加了一段代码。第二个呢,为了让它达到一个换行的效果呢,我又把它给写进去了。好,这个地方给它改进到这里。啊,这里面有一个细节问题啊,同学们,本身这个题呢,已经已经算是做完了,但是有一个特别细节的地方,我要跟他说清楚,就这。我曾经在写这个小小的这个案例的时候呢,我曾经犯了一个错误,这个错误还特别不好找,我当时是这样打的。我没有用这个N。就说这个N,我我认为把这个读出来过后,这个N并不是特别重要,我当时是这么写的。我没用它,我就直接这样写的。这个八份我直接上写,如果这样写的话,会出现一些非常不可确定的错误,就是因为你这个切片。这个1024的切片你都打,后面有什么内容不知道。
14:03
不知道,因为他在给你内存点分配一个1024个字节的时候,他前面里面有完,前面有没有有没有什么内容不清楚,所以他切了1024个字节,这里面字节里面有可能预先已经有些内容,所以说如果你这样写会出现一个什么情况呢?大家看啊,我给大家演示一下,这个会出现一个非常奇怪的现象。就按理说大家可能会觉得也对啊。不就是collect,呃,读了一些数据,从这个连接里面得了一些数据,放到这个buffer里面吗?但是他没有考虑到这个buff分后面的内容可能会到,导致整个输出会有问题,大家看一下,我当时就犯了一个错误啊,我还看了一下才才把它解决的,呃,大家注意这个细节,我给他跑一下。来咱们看一下这个东西,我先退出。跑下我们的server。跑项目是不是这这块都没毛病啊,然后呢,我运行这个端。这个地方逻辑上也没问题,他也等待你连接,我说哈喽。
15:04
没准这个又正确了,你看。没东西,而且很奇怪。你看。这个内容有可能到哪去了呢?是不是有可能打到这屁股后边来了,不知道。啊。看到没有?我我我见到鬼了,这写了一句话,怎么怎么跑这说的,当时我很奇怪,我说诶,怎么他一下跑这屁股后面来了呢,空格呢,找了半天我也找不着,呃,最后我我寻寻觅觅,我终于找到了,跑这来了。哼,搞搞搞笑吧,结果原因法哦,你这样写是不对的,因为你这个buff份你不这样去清一下,就说截断到这,它后面那些乱七八糟东西他都给你输出,所以说地方一定要特别的小心谨慎啊,同学们好,我还把它写进去零。好,然后呢,林位可以简写吗?所以说这个N好,这块大家注意一下就可以了,好同学们,关于这把这个打开,关于这个知识点呢,我们就先介绍到这里,我们截取一段视频。
我来说两句