00:00
各位同学大家好,下面呢,我们继续来学习so的通道,首先我们先看第一个通道server so channel server so channel呢,我们先做一个介绍,然后咱们通过一个具体例子演示里面的过程,那我们来看一下啊,Server so channel的,大家注意它本身并不进行数据的传输。它是一个什么呢?基于通道的一个监听器,用来监听传入里边的连接,包括创建新的这个soet channel这么一个对象,这是它的主要作用,是有监听器,而它还能在非阻塞的模式下运行,所以这是它的第一个特点,各位记住,本身并不传数据,而只是一个监听器。另外它里面有第二个特点,就是这个server soet channel的,它并没有这个办的方法,就是没有这个绑定的方法,所以咱们需要怎么做呢?需要先汇到里面这个对象,然后通过搜的,最终来实现里面这个绑定的过程,所以这是它的第二部分,一会儿我们会有一个体现。
01:11
然后这个说完之后我们继续来看啊,在server so channel中也是有一个叫set方法,这个方法是什么呢?它可以进行我们的对应的这么一个操作,那我们来说一下啊,比如说我们在里边调用这个a set这个方法,它会返回一个soet channel这个对象,如果说对象等于空,那就表示当前没有传入连接,如果它不等于空,表示有连接给我们传入,另外它反映这个SOK的开头对象可以在非阻塞模式下运行,所以这是里边的另外一个特点,那下面呢,咱就通过一个具体例子给各位来演示一下里面这过程就关于里面这个server soet channel的这么一个使用,那下面我们来看一下里面这个例子。
02:04
首先我们剪一下代码啊,比如说咱们现在在里边的这个位置,我先创建这么一个新的一个类,我在里边创建。然后这个类我起个名字叫这个serve so he DEMO,咱们把这个类给它创建。然后创建之后呢,在里边我们就写上这一个论方法来实现我们的这个。那我们来列一下啊,首先里面的第一部分,因为刚才咱们提到啊,这里边它是不是要绑定一个端口,所以咱们先创建一个固定的端口号,或者一会儿我们的操作,那我写一下啊,就是咱们的端口号设置位置,我来一个int后,然后加上一个括号,比如说我们写一个这个八。这是我们的第一个分口号的这么一个创建,也就是咱们通过这个把完成里边那个变成过程。
03:04
口号列之后呢,大部分咱们来创建一个八号,那我写一下啊,比如这里边我就来一个这个配号。我们起个名字叫这个,等于这个就是it里边这个方法,用第二个方法这个,然后把我们的个缓周期里边内容放到这个字节数组中,比如说这位置啊,我就直接写上一个内容,我就叫hello,这个at Google,然后点上这个at s放到一个直接数组中,这是第二部分,我们创建一个这个。然后这个做到之后呢,大家注意啊。咱们的下面操作要干什么的,就要用到咱们这个server socket channel了,那我们下面就来做我们最核心部分,那这个我们用的给大家写一下啊,比如说现在我来写一个server so kind。
04:04
给它起个名字,你就叫这个,比如叫这个SSC啊叫server channel,等于这个server so channel里面一个方法到O方法就是打开,这是我们写的第三步,然后这里面有异常,他把异常不个do,它直接所有出去。然后这个写完之后,我们继续往下看,按照咱刚才说到的啊,因为这个server socket channel中并没有那个绑定的方法,所以咱们需要把里边它对等那个so的对象得到,再完成咱的绑定,所以下面咱就做这个绑定的这个过程,那怎么做我们来写一下啊,这个过程刚才我们在介绍的时候提到过一个,那通过SIC这个对象里面一个方法叫so。不到里面那个SOOK,这个对象在调准的方法,要and完成它的这个绑定,在绑定中咱直接new上一个比较这个think so address里边加上咱们这个端口号,这样的话我们就完成了一个绑定,就我们写的这个代码,然后绑定之后呢,大家注意啊,这里边我们可以让我们这个相关的操作在非阻塞玩下运行,就是这个server s channel在非阻塞模式下运行,那要怎么做或写加啊设置你是一个。
05:33
非阻色等模式,这可以是一个阻塞模式,咱们用SSC里边这个方法,刚才说到了啊,做这个。com里边的值,咱们改成叫for,就设置成叫非组合这种模式,然后这个做到之后,下面咱们来一个Y有循环,就是一直监听里边是不是有新的连接传入,包括咱们创建一个新的。
06:01
Socket拆对象,那我来一个处一直监听有没有新的这个连接传入,那怎么做,用SIC里面的方法叫A在的方法,最终返回一个就是the so拆头D小啊,这是咱们刚才提到的,比如说起个名字我就叫XC。所以现在这部分完成了,就是一直监听有没有新的这个连接转入。写一下啊,就是先听是否有这个心啊,这么一个链接进行管入,然后这个过程呢,大家注意啊,刚才我就在这里边都写到了,咱们调里边的A3方法会返回一个so的拆对象,然后这个对象可以在非阻塞模式下运行,咱刚才试到了,然后这个对象大家注意啊,如果它返回,那就表示没有连接传入。如果它不是的,那这里面就表示有链接进行传入,所以在下面在里边我们来做个判断,那我写一下啊,比如这里边我来上这么一个if。
07:11
在衣服里面写一下,如果说里面这个SC它等于这个,那就表示没有这个新的并接传入,那比如说这置啊,我就直接输出一个值啊,比如咱就来一个这么一个捺啊,就来一个捺这么一个输出。考试没有新的链接传入啊,包括这个过程中呢,为了咱们效果更明显,我在里边呢,加上一段提示信息,比如咱们课件中的这个信息,我把这句话直接拿过来啊,给大家到这里啊,就如提示它说正在等待连接这么一个传入,然后等待之后,如果说里边就是等于空,那我们就直接给它输入一个大,并且让它sleep这个2000啊这么一个时间,那sleep下啊,咱们做这么一个处理。
08:00
这是我们写到的啊,然后这就表示没有那个。链接的这么一个传入,然后写完之后呢,下面咱再加上一个else else就表示呢,有链接进行传入,如果有链接进行传入的话呢,那咱就把这内容给他输出一下啊,比如把这个地址或者谁给我们分过链接,那咱把地址或输出,比如这里边啊啊从这里边请求做面的连接。然后这个做到之后,咱们可以把内容给它写到咱的八份中去,那我们来做一下啊,我们用这个八份。点上一个方法和这个你问的,你问的什么意思呢?不表示我们这里边这个指针。下啊,指针指向了零,不表示指向零嘛,那就第一位之前表示你现在要开始操作了,然后操作的话呢,咱们通过这个SC里边这个叫right方法,将这个八份里边用这个解操作,然后写完之后,最后咱们把这个SC错一个close。
09:12
因为现在这个基本的代码我们完成了,就是里边的这么一个基本过程啊,然后这个过程给各位再说一遍啊,最终我们做测试。大家看一下啊,在这个代码中呢,首先我们写了一个短口号,然后创一个buffer,里边有这个字接数组,在这里边我们创建一个就是server so channel,然后得到里面的so对象绑定你的那种绑定之后咱们让它可以在一个非阻塞模下运行,然后下面就是循环监听,看里边有没有新的链接传入,第2AS方法进行操作,如果等于呢,没有,不等于呢,那就表示有链接进传入,所以现在这个代码我们就完成了,大家注意啊。
10:01
因为咱们是在非阻塞模式下运行的,所以这里边我们会有这个输出,但是如果说你在阻塞模式下运行,那这行会一直阻塞中,也就是说也只有有链接穿入之后,它才会往下执行,那下面我们来做一个测试,看一下它的效果是怎么样的。下面咱们来执行一下啊,我这里边用的是四个八这个逗号,那下面咱们来做一个执行,看一下里边的效果怎么样,现在我来。执行一下啊,然后咱们看它效果。大家注意啊,目前是不是在等待,因为目前没有链接传入,所以它的值是不是都是这个,那那比如现在啊,我给这里边就是加入一个链接的这么一个传入,咱们看它会有什么样的效果,那比如说我加入一个啊,我就直接加这个127.0.0.1,咱们是这个八。
11:01
然后这里边一回车,大家看我这里边你注意啊,是不是有这个链接的传入,这是我刚才发过来这个链接,这里边是不是能得到啊,所以现在咱们就把这个基本的代码我们就完成了,通过这个代码大家要理解这个server socket channel特点,包括刚才我的文字介绍,以及通过代码咱们做的一个具体实验。所以这个我们就完成了啊,然后完成之后呢,在下面有针对这个server soet channel中一些细节的说明,咱们再来看一下啊,就这些过程刚才应该我都说过了,那给各位再做一个重复,咱们算是再看一遍啊,首先第一个啊,打开serve channel用open方法进行打开,然后第二关闭用close啊,这简单。第三个是监听新的连接,咱们用a set方法,这里边我们用这个while循环一直进行监听,这个值等于那表示没有新链接,如果它里边有新链接,我们往下操作,这个过程中呢,如果说也是一种阻塞模式,也就是说咱们应该会在这一行一直在阻塞中,但是因为我刚才变成了非阻塞模式,所以它能够往下执行,也是里边的这个效果,用这个。
12:25
Configgure blocking等于true或者等于false来做这个设置,所以这是关于我们说的第一个so通道so so channel,各位记住它的相关的特点。
我来说两句