00:00
那我见个项目叫做DNI-D02。嗯,有点卡呀。Test,我们先来一个阻塞式的IO,然后先体验体验,我们说如何用这种这个no完成一个网络通信,叫做NIO,那首先呢,我们得了解一下,我们说要想用A完成一个网络通信,它必须得用几个核心点,对吧?说使用又叫做NIO完成网络通讯的三个核心对吧?这几个核心你是不是都得用啊?那么第一个就是我们之前所学的是不是叫做通道啊,你网络服务器是不是也是数据传输啊,你也得有这个通道叫做channel,它是主要就是负责连接了,那你有通道,你还得有缓冲区域对吧?缓冲区域叫做buffer,那他负责干嘛的呀?负责数据的存取,那么相应的现在又有一个新的概念叫做选择器对吧,叫做select。
01:25
ER,就这个sweater它是干什么的呢?它呀,我们说API上给他翻译是它是叫做selectable channel的多路复用器,然后呢,它是用于监控,用于监控这个selectable的一些IO状况的,那么大家说问题来了,说什么时都拆啊,我们说这是不是通道的意思啊,对吧,我们说先说通道,哎,通道那是不是它都在这个叫做Java点点NIO下叫做channels点叫做channel啊对吧,这是一个接口啊,然后下面它是有有一些实现类啊,那么其中一个实现类叫做leable channel,对吧?当然这中间还有一些细节的东西。
02:25
咱们就不管了啊,那么其中这个select China呢,它是一个抽象类,那么它也有几个直接的子类,一个叫做socket socket China,那么一个叫做so socket China,一个叫做data gra China,那么相应的还有几个叫做什么呢?叫做pe.think还有什么呢?还有一个叫做PA,点上south China听懂了,那下边这两个管道咱们回头再说,咱们主要是是关注上边这几个呀,含义上面两个这叫做pcp,下边这是不是udp,说白了就是用于网络lo了,注意有赛要柴能啊,是没有范有柴能啊,大家注意范绕柴能它不能它哎,它不能切换成非阻。
03:25
个模式听明白白快要开头不能切换成非阻塞模式,非阻塞模式是不是相较于这些网络I元的呀,所以说说白了,选择器是不是用于监控这些呀,对吧,没有file才吧,哎,没有file才能啊,那这用了选择器的一个作用,用于填空fleable,也就是这些对吧,它们的一个IO状况这都能清楚啊对吧?那么接下来呢,我们就并用顺如何用I完成网络通气,那么一边叫做client客户端,客户端这里有each,呃,有这个我导下包,那么相应的一面是不是叫服务端呢?服务端那么叫做public voice server,那么先的一点一点来,我们先来一个客户端,那么我们说只要完成数据的传输,你说先没有通道啊,对吧,不管是本地的还是。
04:25
网络的你先得想办法获取通道,对吧?那么说通道呢,它都提供了这个1.7以后是不是都提供了一个open方法呀,那就来个sock China,点上open,点上open,用这个点open,你是不是得知道你要连谁呀,对吧?这里需要一个so address,那你就new一个a ne socket address是不是表示网络的地址啊,说白了就是套件色嘛,什么和什么能组合成一个套节字来着,是不IP和多啊,点0.0.1,然后来一个逗号九吧,九吧,它会给我得到一个soet channel叫做s channel吧,对吧?然后呢,有异层我暂时抛不出去,但是你们是不是得传上去啊,我这就抛了,这大家还能看得清楚点,那这样的话通道是不是就获取到了,有那通道我是不是就可以准备发送数据。
05:25
对吧,那你要想发送数据,你得有什么存数据吧,对吧?有啥呢?八分缓冲区大,那就是分配第二分配指定大小的缓冲区域,对吧?那就是八分等于BA8分点上a loate来个1024,那么接下来我们是不是就可以发送数据了呀?我们说发生个什么数据给服务端呢?咱们发个图片可以吧,把这个1.jpg对吧,发过去,那也就是说现在我要干嘛呢?从本地是得先读这个图片,从本地读取图片,然后把本地的图片是不发送给这个远程的服务端啊对吧,那说叫做读取,读取本地文件并发送到对吧,服务端去能记了吧?那你要想读取本地的文件,你得有通道吧,那你就用哪个啊。
06:25
是不是有fair channel啊对吧,那得来个叫做fair fair channel叫做in China,等于fair fell China,点上open对吧,然后来一个这个叫做pass,是点上一点一点一点GPG对吧,然后呢,是我们是啊三点的点是不是叫对的呀,对吧,我是读,那么接下来我是不是就循环读,然后不断的发呀,来个while循环读,那就是in China in china.read把数据是不是都保存到缓冲区中啊,不等于负一,说不定就读到了,读到了我是不是要写啊,通过so channel是不是right过去,但是在此之间这个缓冲区你是不是得怎么样?哎,你是不是得切换成这个读数据模式啊对吧,然后呢,对完还有点可立而下。
07:25
这么多地方对吧,那么最后不要忘了我们要关闭叫做通道对吧?关闭通道那就in channel点上close s channel点上close是不是完闭了呀,当然大家把这些都放到final里面啊好了,那这样的话客户端是不是完事了呀,发送来个图片是不是给服务端呢?那么接下来服务端跟人家基本一样对吧,我们说服务端你你说不是得有对应的呀,对,客户端叫so channel,服务端那就是serve so channel点上open,然后得到一个server socket channel,我把这个注释加上叫做一破取通道对吧,来个server socket channel sx channel是么样,它也有异常作业展示给它抛出去,这是吧,然后第二步注意我是的绑定账号。
08:25
对吧,对吧,你说我这个服务端端口号是多少,远程的客户端是不是才能连我呀,对吧,我说得绑定绑定绑定连接银行绑定连接这个端口号,对吧?来个叫做channel,点上就叫做绑定,对吧?我服务端是不只需要指定一个端口号就可以了,等着客户端的点对吧?那再研究一个an ne socket address只指定一个端口号,看到有,然后接下来三,那是不是我就可以获取客户端的连接了呀,那叫做获取获取客户端连接的那个什通道啊,对吧?那就通过SS拆讲accept,它还记得是吗?原来咱们讲I这个原来的传统IO的时候,你是不是也这么写啊,那他会给我得到一个S,拿到了so channel是不是几乎是不是就差不多了呀,我说读。
09:25
读取客户端发送过来的数据啊,图片就并保存到文件读取,读取客户端或者说接收客户端数据,接收客户端的数据并保存到本地,那我要想保存到本地,我也得有一个file China对吧?File China叫做out China fair China点上open pass是点上盖的,保存成2.gpg指定它的一个状态叫做这次得是right吧,同时假如说文件存在的话,我也可以是不是可以覆盖呀,对吧,有文件就覆盖,没文件就创建,是这个意思对吧?好,那么我们就开始通过套接字对吧,循环的是不是去接收啊,那就s channel点上read,我还得有个啥,我是不是还得。
10:25
冲区啊对吧,那我得有缓冲区不能忘了,我要是一操作数据必须有缓冲区,那就是叫做分配一个指定大小的缓冲区,叫做BAT8UFF分对吧,等于BAT8UFF分点上AOC来个1024对吧,然后它要是不等于负一,说明是不是就读到了呀,读到了我就通过我的二三角是不发出句啊,当连词缓冲句我不能忘了Li对吧Li,然后呢,通过out China right到本地,同时八和点和立下对吧对吧,那这样的话完事,那么六呢,我们说是不是就可以关闭对应的通道啊对吧,那这个时候呢,就是来个s channel点上close,然后out channel点上。
11:25
Close ss就是serve.close是不是关闭搞定了对吧?那么客户端服务端掀开哪个从服务端呢?那么右键右键运行从服务端启动了,然后这开始客户端右键运行是不是立了呀,也结束了,那这个时候呢,我们过来F5刷新一下,2.gp有了吧,打开诸葛亮对吧?同时我们看一眼大小,29101C是没问题啊,29107没问题,那这就是用L完成一个网络通信,但是大家注意的什么呢?现在我用的依然是主塞,是L,我说没切换的对吧,咱们先体会体会用法,哎,也没用,选择题咱们一点一点来啊。
12:22
那这个呢,我们就完成了一个数据传输,但是服务端说没有反馈呀,那么接下来咱们再来一个,比如说客务端发生什么图片给服务端,然后服务端如果从中接触到了呢,要给客户端来个反馈的,以前咱们是不是也做过类似的呀?那接下来咱们再来一个,再往一让大家看看主色是IO是咋回事,那是不是这还是主色式的呀,叫n nio blocking.o CK blocking nio,那么还是客户端叫做connect,然后呢,再一个是服务端叫做什server啊,Server CTR serve o导向,然后客端就发布出去啊,这一次我就别加注释了,可以吧,跟刚才那是不是基本类似啊,对吧,那就先来看socket channel,点上so open呢,当然你这。
13:22
就得指定一个,呃,IP和端口号的组合是不是才是错体字啊,对吧,这时你是不是依然可以写你同桌的IP啊,对吧,对吧,那么这样的话呢。有异常先给它抛出去对吧,对吧,然后这个时候叫s channel,同弟们对吧?那相应的还是我是不是要发出数据,我得换出虚啊,对吧,叫BAT8UFF分对吧,B等于BAT8分,点a lo来个1024对吧,然后呢,当然我要发图片过去,是不是发本地的图片呢?Fair channel叫做in channel等于file channel点上open叫做pass词,点上get1.gpg叫做standard,点上read对吧,然后呢,我就可以Y循环去,边读边写,对吧,叫做in China点上read,到八法中有和叫做不等于负一,不等于负一的话。
14:36
啊,说明读到了,读到了是不是写过去啊,别忘了切换成读模式,然后通过started China点上right,把这个right过去对吧,然后来个肯,那这是不是就发送了呀,发送出去完之后,我是不是还得接收服务端的反馈呀,对吧,说接收接收反馈,接收服务端的反馈,那么这个时候接收反馈。
15:05
我是不是就得接着来啊,啊对,你们能想到是吧?那咱们先别查了,看看主色,回顾一下主测试,那接收反馈我是不是通过这个叫做S3呢?我得不断的去叫做read呀,Read它到我也到这个方法中啊,不等于负一,是不是已经就说明读到了呀,对吧?那读到了我是不是不断的接受,不断接入反馈呀,对吧?然后完事了之后,我是不是给它打印一下对吧,Set out new string,来个b of点上,呃瑞从零从零到哪呢?接方多少是不是来多少啊注意我们说这个China的read是不是也返回论呢?对吧,就是你实际读取的字节数,那就是我把实际读取的这个呢,从零到嫩是不是转换成字符串啊,然后BF点下。是不定在接收服装给的反馈啊,对吧,然后那这个完事了以后,我是不是就都掉落了,那就是嗯,In in channel channel点上close,然后s channel点上close搞定了吧,对吧,接收了反馈,注意啊,咱们写的还是组算起来了啊,那就别整错,那接来数叫做so起来了China点上open对吧,它有异常先抛出去对吧,对吧,这个叫做ss channel,然后呢,接下来干嘛呢?我说的绑定连接对吧?那就ss China点上绑定的端口号,用一个I socket address指定的端口号即可,接下来我什么接收客户端或来个链接啊,或者获取客户端的连接叫做access。
16:58
对吧,他得到的是sock China吧,对吧,叫做socket China没问题吧,对吧,然后呢,下来有了这个三参能之后,我是不是开始读啊,为我循环读,通过S参点上read对吧,点上read,我们是不是还得有缓冲区啊,缓冲区be buffer be buffer,点上AOCATE1024读到方总不等于负一,给它怎么办?我是不是保存到本地去对吧,叫做放channel点上叫做open,叫做pass,是点上get。
17:45
paths.get到2.jpg对吧,然后standard的点上right,同时再来个点是这意思吧,对吧,我来这是这几步是是不咋回事啊对吧,知不是回事啊啊。
18:07
啊,没写完是吧,我是不是还得再才能接受一下啊,对吧,叫做out China对吧,然后呢,接下来我BM.li flip对吧,点flip,然后通过out China的时候保存到分,然后B完点啊clear一下。搞定了吧,对吧,那这样的话我是不是就接收,接收完了以后,我是不是该给客户端发送反馈了呀,对吧,说发送反馈给客户端对吧,对吧,把这个反馈发过去,那只需要来个什么呢?BF buffer,我是不是把这个数据都放到B分中了,点put put个什么呢?获一个说接收啊叫做客服务端,服务端接收,客户端接收数据成功了,接数据成功点get BA对吧,然后b off是不是也得点flip呀,然后才能通过S颤点right啊b right出去。
19:17
那么对吧,然后呢,最后我得来个s channel点上close out channel点上close sx channel点上,那这样的话就服务端就写好。搞定了对吧,但是呢,这个时候我们是不是先看服端呢,右键运行,右键运运点错了,右键运行服务端已启动,是不是该启动客户端了,右键再运行对吧,注意看。是不结束不了,那这个时候是不是线程一直处于阻塞状态啊,等待数据的对吧?那这个时候你不能确定客户端到底发没发生数据,客户端发没发数据,那这个时候服务端他是不知道的,对吧?那因此这个时候呢,线程一直处于阻塞状态,对吧?那我说原来咱们怎么解决的呀,是不是沙旦呢,对吧,那就是沙热旦,那也就是说哇,客户端现在服务端不能端,客户端发发完那我们说不得克端得告诉人服端那三玩了,那也就是说通过s channel点的叫做s output,所我明白对吧,实际上现在的方解决方式有两种,一个就是s output,一个就是把这个线程切换成非阻塞模式吧,对吧,当然现在切换成非组成模式还看不到效果,咱们先用沙杠,接下来是不是再用选择器啊,对吧,那这个时候我是不是刹杠了,烧到了以后呢,我就可以右键。
20:53
运行实际上严谨起见,我这边是不是也刹两下啊,先试试行不行啊,我直行,呃直行,然后呢,这边在右键。
21:07
执行是完事了,这服务端已经接收到客户端的数据了吧,那这是客户端接收到了反馈,我过来F5刷新一下,是不是有二啊对吧,是不是也有,当然我这个是不是把它覆盖掉的,对吧?把它覆盖掉也是291017,那这个对吧,那这就要NNAO完成一个叫做网络通体,但是这个时候还是非阻,呃,这还是阻塞是。
我来说两句