00:00
各位同学啊,现在有要写两头了。嗯,就是说按理说呢,这个程序可能是各写一端,但是因为我们是一一台电脑,所以说我们这台电脑呢,又是客户端,诶又是服务器端,当然也可以这样做啊,待会我们写完了过后呢,韩老师这个服务器我启启动起来,你们都来连我。也也可以玩,比如你发个消息,诶,我这边可以接收的啊,其实就是一个简单通讯了,就是通讯,但因为我是一台电脑呢,我又要写服务器端,又要写客户端,理论上说我们应该先写服务器端,对吧,好看逻辑。好,第一步看一下程序框架图,写完了服务器端的功能,第一个编写一个服器,在888端口上监听。好,我们现在一步步行。打开this cold。当然我们新建一个文件,这个是第几章?第18章。幺八。好的,各位同学,我们新建一个小章节啊,新建一个小章节。
01:03
来新建一个文件夹。Tractor。幺八。OK。那么这是我们的第一个案例,TCP编程的一个案例,TCPDEMO。OK好,这里面呢,我们写两个,想个两个目录,一个呢我们叫server OK好,还有一个文件夹呢,我们叫client,代表客户端,但实际上啊,我再说一遍,实际上在真实的开发的实验是client和server运行在不同的电脑上的,不可能自己玩自己这个有病了,对吧,肯定server呢是一一个电脑是另外一个电脑,但是我开发是在一个通开发,OK好,那么先写server吧。Server。点GOOK,好,那现在呢,我们现在开始来做这个开发了,Package。Package。主包包,对主包包,然后import没问题,然后这个我们肯定要引入一些东西了啊,当然这个包啊,有一个特别重要的包包哈,叫net包,我要说一下。
02:08
在做网络开发的时候,做网络开发时啊,So开发时啊,主要说的是我们说SOSO开发。Sock开发室啊,这个net包是特别重要的,我们来看一下net这个包包含了含有含有我们需要的,需要的所有的有的这个方法,方法和函数,那么看一下吧,同学们打开这个来打开我们的这个文档,我们来那是什么?对,这个包很重要啊,这个包非常重要,它是跟网络相关的,都在这个里边,那我百度一把先,百度一把先,然后呢起个go。这个为什么连不上,稍等一下。稍等一下啊,我这个。
03:00
我这个你稍等一下,我把这个连一下。好,一会儿就来了。怎么还没来呢,这么慢。再看一下啊。气怎么没来呢?怎么回事儿?都分享了呀。不对呀。啊,来了啊,这个反应太迟,迟钝了啊,太迟钝了,好,来各位同学来找一下go。够那。够官方。
04:02
Go,这个官方的官方的文档。好点开它这边看一下,呃,我们先找到net包,Net呢是N大头的,所以往下找net走走走走走,诶过了吧,好像。在下面是吧,下面在下面还在下面。嗯,啊,找到了,我们看一下这个包包,Net包提供了可移植的网络IO接口,包括TC pip udp,还有域名的解析UNSO等等,OK,那下面呢,我们主要是看它的一些经典的这些重重要的函数啊,同学们,我们学习一定要学会看手册,你光靠这点东西不够啊,大家看经典的案例看到没有?哦,这个是DELLDELL这个函数和服务器键键连接的。啊,这个是键连接的,它是这样,那么我们要的不是它,它是客端啊这个玩意儿啊,那listen哦,Listen是我们要的,对不对,Listen是我们要的,它是监听,那么看看它有哪些东西,这边是cost,它的一些常量。
05:01
它常有这些变量有这些啊变量有很多很多这样信息在里边,那么我们看它常用的函数有哪个呢?啊,这个地方有很多的type,我先不用它这个我不需要,我要的是哪一个呢?同学们往下走哦,往下走。其中有一个函数,看这这个函数待会儿要用啊,这个函数要用,还有一个叫listen listen在这,哎这个东西很有用,大家看这个函数,点进去看一下它是干啥的呀,返回一个本地网络地址。监听的内就这个就是监听了,就是有个人撑着个耳朵要等着呢,啊等着呢,那么它这里面第一个这个地方这个参数呢,是填你到底是按什么协议来鉴定的,是TCP呢,还是DBCTCP6等等,我们这显示用的是TCP协议。OK,那后面这个呢,是一个地址,这个地址就代表你在哪个IP的哪个端口上监听,如果监听成功,会返回一个listen。
06:03
失败会返回给L,那listen是什么玩意儿?点进去哦,它是一个接口,那么一旦连接成功,通过这个listen我们可以拿到网络地址,还可以通过它去except,这个就很重要。except是干什么?它是等待并返回下一个连接到该连接的连接,该接口的连接就是那根线。而且呢,我们也可以close,就你用完了过后,你一定要保证要close他的是不是好,那现在代码就基本上可以写了,来跟上老师思路。啊,首先呢,我们在这个这边开始写一段代码,看不着急啊B1步来。中。现在呢?我们先来一句话。为了提示大家说我开始监听了,服务器注意听啊,我我这说打些打些提示,服务器开始监听了啊监听了,怎么监听,先写到这儿。
07:00
那你监听的时候呢,用的就是net包包里面的listen Li对不对,那么参数第一个是CTCP,就说我是用TCP来监听,那野外就说你跟我交流,请记住用TCP协议,别的协议我不认。啊,就是我们之间通话靠什么?靠TCP协议,你你如果给我发个HTTP协议,我不认,就这意思啊,那么我是在哪个地方监听呢?好写上,你可以写个127.0.0.1冒号。8888。这句话的意思就是说我在本地监听888端口,如果这个代码没有问题,你会看到有一个888在监听,但是有些人喜欢这样写,这种写法呢,他只只是能够支持IPV4,所以说有些人你看他是这样写的。也可以这样写法呢,是IPV4IPV6它都支持啊,这种呢就跟严谨,所以说你认为写的不好的话,假如对方用的是IPV6,他他连不上你有可能啊,所以这地方呢,我们还是用这这这这个吧,好吧,用这个比较安全一点,好,如果成功呢,会返回一个listen Lin,然后呢,这方有个L。
08:15
写到这一栏,好,同学们,那这地方的意思做一个解释啊,解释一下这句话的意思,我重点就是把这个说一下,因为大家第一次接触。第一步这个地方的TCP表示,表示使用的协议网络协议是TCP的,没问题,第二个这句话表示的是我在本地监听8888这个端口,哎,表示在本地本地监听。监听8888这个端口完事。好,那现在呢,我们就可以来进行一个小小的判断,如果,如果这个Li a不等于near,表示什么意思呢?咱就成功了,但是呃,表示表示失败了,啊尼表示失败,什么情况会失败呢?比如说你监听了一次,你又接着再监听,那不就完蛋了吗?好,输出这个错误吧,PF。
09:12
好,就写一句话,咱们就简单一点,直接输出啊,就说什么呢?就是叫listen listen,呃,Error,把这个信息给各位朋友输出来,L注意啊,一旦这个监听都失败,你就别玩了,为什么你你监听都监听不成功,那下面代码还跑啥呢?就好像打个比方说,有一个有一个前台,他本身在这等着,结果前台都跑路了,对吧,前台诶我我不干了,你你其他人来找还还找得到里面的人吗?找不到了你前台。休息去了对吧,你找不到它,所以说这就return,那如果成功呢,我们来看一下这个东西是什么,各位同学我们先来玩一把啊,我们看看这个内到底是个什么东西,大家看一下它其实是一个接口。要准确的是实现了listen接口的一个变量,那我们看看是什么,打开看一下,打破它神秘感啊。
10:04
来,我们微一下。输出这个东西,Lin,这个就是监听成功了吗?成功好朋友们跑一下。V是小写的,对,刚才有同学提到这个问题啊啊,前面呢,这问题F,我们看看它是什么。总得把这个立说清楚吧,它是什么东西,你不然的话,老觉得这个立是个什么玩意儿,对吧?好,我们玩一把。来同学们,那现在呢,我们切换到切换到刚才的目录,我们是chapter什么呀,幺八。18DICD到TCP democd到它的server go run main.go跑跑跑错了。走table。T。Go,诶,我这是不是那个啊,写明不是go了,Go run server走同学们看效果。哦,他说了,服务器开始监听成功了。
11:03
那这个时候。他是他相当于就跑路了呀,就说相当于他一监听,刚一监听就跑了,那你就没有意义,所以说现在要保证他监听功能不能走。就是你要在那一直监听,你别监听一下就跑了。那怎么办呢?好,这个函数就上来了,这个listen里面有个特别重要函数叫accept,这个函数很牛逼,它是干什么呢?说它等待你的连接,如果你没有人,没有连接,我会干什么呢?我在这卡那等到你,意思说我等你来啊。如果一个人都不连接,我就一直等。所以说这个except呢,它是代表我等待你的连接,那么等待连接我应该是个for循环,对不对,所以上来过后咱们写一句话。它里面有个close,这句话呢,要及时关闭这个资源,但是因为我是diver,所以说你不用怕啊,虽然我是我我关闭,但是是后面的事,你看我用掉的是他的一个close。
12:04
Close关闭该接口对吧,使用并使任何阻塞except的操作都不再阻塞并返回错误,那这个呢,使用的dier,只要你这个main函数不退出,我就不关闭啊,这个就要要及时的,就说延时关闭。对,延时关闭。延时关闭哪一个Lin好,写完了接着往下循环的等待,注意在这循环等待。等待谁?等待客户端来连接我。按钮注意啊,每个地方每个地方都要写清楚,既然是循环连接,那没什么说的负循环。我就一直等吗?我就一直等好,那一直等的话呢,比较简单。那是怎么怎么写呢?就等待你的连接吧,所以说我这边写一个叫Li点。AC pd,好,这个就代表经等待客户端的连接。
13:01
就是等着。等待。等。等待连接,等待客户端来连接,我来连接。来连接连接我。那为了让大家看到效果呢?我在说一句话。就一个是监听,一个是等待连接啊,我就写等待客户端来连接,大家看清楚了啊,这个东西不难,但是呢。但是你要把它搞清楚,你后面很难写一些复杂的东西,对不对,那这个它会反馈什么东西很重要,各位其实我们我们让他连接,我们最主要的是要拿到一个什么东西呢?拿到这根线。我们要拿这个东西,因为你没有这个线,你没办法通讯,所以说我们可以看到这个except刚好就返回了一个这个东西,看清楚connect。这个connect么?点击lawyer,哦,O了这一下就打开了哦,它是一个什么玩意儿,它也是一个实现了connect接口的一个变量,或者是一个一个实例,里面有大量我们需要东西哦,明白了,诶老师也这样清楚了哦,可以写嘞。
14:12
有链接可以写东西,哎哦,可以读啊,可以读啊,还有可以写,那不就是可以读可以写了吗?就好像我们打电话一样,我可以说话,我可以听,还有什么呢?Close,因为它也是一种资源。啊,还有呢,我可以拿到本地地址,还可以拿到对方的地址,诶这样子我就可以通过网络来阻止哪些连接,我打个比方,服务器说只要是以1921168给打头的,通通给你拒绝,我一看你地址不对,啪,Close掉踢走你。对不对,很舒服,所以学TCP编程比学那个HD编程呢,学起来比较比较痛快,而HTP协议我跟你说这些东东西都看不到,看了半天我很郁闷,但也能看到,但是没这么没这么底层好,你看这还有set一个什么设置,一个周期是吧?啊这这几个用的相对少一点,但前面尤其是这个read write close local,还有rainow这几个用的特别多。
15:07
啊用特别多,那不管呢,我们先拿到拿到这个链接来各位朋友。要的就是它conn。那有可能,哎,我接受一把。那现在我要做一个判断啊,各位同学,我要去接受一个判断if。If,如果我们这个A不等于near啊,上面好像定了一个,那这没没问题啊,因为这个没定义,所以你这样写它不会报错啊,Near。好,如果这个地方出错,我们就说except出错了,对不对啊,我们说一个,我们就提示一句话嘛,说呃,This except出错了,那你每个地方就要搞清楚error。等于什么呢?输出来,那如果这个一旦这个连接出错了,嗯,不不一定需要。为什么这么说呢?哎,你一个链接出错了,另外另外也有可能正确呀,就说就说什么意思呢?就说这个A客户端连上了,B客户端没有连上,难道你把你把A客户端也干掉吗?没道理,所以说呢,这个地方你不用啊,错了就错了,就一个错了也是很正常的,比如说我现在链接并发有1万个,只有一个没连上,没连上再再重连一下就完了,所以这地方不需要return,不需要return,但是把错误信息打出来就是警告一下,好拿到这个链接过后,我们这个地方一旦成功,我们把这个connect打出来看一下。
16:31
啊。好air else,我们就说有一个连接成功了,假设啊后面的代码我我要把它把它重新处理一下,就说except成功了,把这个链接给打出来看一下。好,给同学们看一下这个东西长什么样子。好的。成功,然后呢,我们把这个connect打出来,看来是个什么东西呢,它其实是一个接口。好,我们把它输出。把它输出con好写完了好,现在我们来玩一把,看看能不能连上啊,现在我们看代码有问题。
17:06
好,现在我已经我已经可以连一个了,注意看这个逻辑啊,同学们一个连上以后。他干什么?他没退出。就是说相对于这种感觉啊,我我给你连上了啊,连上过后呢,我把这个成功信息打出来过后,我说有一个连上了accept成功了,然后呢,我接着这个代码又回到这个地方,继续等待其他的客户来连接。就这意思就是说我在那里不停的等待来连接了,过后我就我就我就做这件事情,然后呢,我我再连接,当然大家知道,待会儿我肯定要起一个携程。这里准备。准备起。一个携程,携程为谁服务,为这个客户端,客户端服务是这意思吧,那当时这七个携程,这个携程你就可以理解成老师画的这个图,哪个图呢。
18:02
就是画的这个图。那如果再来一个,我又给你起个鞋子,好,就是这个图好,那不管怎么样,我们先来看看连接有没有成功,跑一个先各位同学看看我们能不能成功,说老师你这怎么测呢。怎么测呢?有一个办法,最简单的方法呢,就是第一个方法,你要测的话,你写一个客户端。第二个方法,其实还有别的方法也可以测,就是那个tonight,你们学过那个tonight指令吗?没有学过哈,我给大家演示一个,其实还可以简单测它有没有成功,可以用这个指令也行。那这个做维护的同学肯定是知道的啊,就是有一个指令叫TC,呃,这个tonight,这个叫远程的一个连接吗?远程连接这个你看啊,这个tonight可以专门来测试一个端口是不是在在连接的。啊,这个你你比如说你大家给你演示一个tonight。Tonight,我连接到百度点。com,我直接写八零这句话意思就是说我想去测试一下百度的八零端口是否在监听我回车。
19:07
别上了。这说明什么?这说明百度那个服务器确实有个八零在监听,那我先退出,怎么退出呢?CTRLC不管用了啊,要输CTRL这个中括号。我我说的是这个啊,这个大家记一下就行了,CTRL加这个。CR。加这个符号就可以退出,这个符号就可以退出,好啊,这这个这个中括号啊。这个组合就是CTRL加这个,好,现在这个到这来了,过后呢,我们我们再退出一次,这这这个才退出来了,好我们来玩一把,看一下服务器到底有没有给我连接上啊,先测一下,待会儿再写客户端来,首先我们让服务器端提起来。好,我们先让服务器一端起起来,注意听。好朋友们,我来走一个啊,Go run,我们的好。同学们可以看到,现在它不会马上退出了,不会马上退出,你看同学们看理解一下啊,服务器开始接听,等待客户端来连接,大家一定要清楚的认识,现在他在这个地方堵着呢。
20:12
他卡这了,他说呢,诶赶紧来连接我,连接我好,现在呢,我们就来连接它,我们这个不能关闭啊。谁,谁来联系我了?有人啊,有有有有人来搞了一下啊,肯定有人,但是你看他搞了一下过后,我不是还还在这等待吗?啊,肯定有个小伙子啊,搞坏事了啊啊啊CDCD一看就是小夏干的事啊。啊,不是好,那我再连接一下tonight,我再连接tonight,我因为我是本地嘛,我就写127,因为我本身就是在这个地方,就我去127,但是你不能这样写了,你这样写连不上我,你得看我的IP地址,就你们想连的话,你们可以在这写上韩老师的那个内蒙的IP啊,你可以点,比如说我看来个我就写上8888,你看我一回车。
21:03
我这边马上就会看到又来一个链接。哎,你看是不是那有些同学老师,我我们先连一下玩玩,是不是可以呢?可以你这样,你你们想玩,现在可以让你们测一下啊,同学们教你们怎么玩。你们这样子玩你,我先把我的IP地址告诉你们。IP config。啊,对。我的IP地址,这个你们都都可以连一下,看看是不是有有反应。我的是192年。我是哪个?二零,我是这个,你们可以连这个,你看你们是不是都都可以连一下,看我一说我又在等等你,你再一连接又来一个,你任何一个人来连接,我都可以连到这儿,而且你们应该可以看到你们会进入到这个一个一个新的一个终端是吧,好,这就是他的一个最基本的一个东西,好呃,这样子啊,我们把这块这块先说到这儿,这是第一阶段吧,先截个视频。
我来说两句