00:00
各位同学大家好,咱们继续来编写NIO多人聊天室功能,咱们继续来写这个服务端代码,刚才呢,我们把这个如果是一个的状态里边做处理,这个代码我们完成了,那下面我们写一下,如果说它是一个可读状态,那咱们做什么处理,那这里边我把这个方法我们来写一下,首先这个方法我给它起个名字,我就叫这个read opator。然后在里边呢,我们传入它的参数,这个参数里面注意啊,肯定有咱这个select。这肯定没有问题,然后除了之这里就不需要个serve,因为得到是那个可读里那个,所以咱们这里边需要用到另外一个参数,也就说里边的这个参数叫selection key,通过它咱能得到就是已经就绪出来那个channel,所以把这两个参数串进来,然后出完之后,下面呢,咱把这个方法做创建。
01:07
我在下面做创建,我们写到这里,这个方法做的适应就是处理你那个可读状态的这个操作,所以现在这个方法我们做创建,创建之后在里边咱们同样先把步骤写一下,然后实现里边的代码。那我来写一下啊,首先里面的第一步操作,咱们先从这个selection里边,把我们已经就绪那个通道给他先得到,这是咱的第一步操作。就是从这里边先获取到你这里边已经就绪的那个channel或者说通道,这是第一步操作。然后这个做到之后呢,我们的第二步,咱们就要创建这么一个buffer,把这个做创建。因为现在呢,客户端要给服务端发过来一个内容,所以咱通过buff进行这么一个读取操作,这是里边的第二步操作。
02:09
然后这个做到之后,下面我们写下里边的第三步,第三步做什么的,那咱就需要循环的方式去读取一下,以客户端发过来这个信息,就客户端给我发过来消息,把这个我们需要给他得到,这是里边的第三步。而这个过程中,咱们肯定是通过八块进行操作的,所以这是第三步的一个编写,然后这个做到之后,我们的第四步操作,因为这个数据已经读到了,那第四步呢,咱们就需要把这个China是不是给他再注册到咱的上面去,我们去监听其他的可能事件,因为你这个完了可能还要客户端继续过来,所以咱要不断进行监听,所以这是第四步。就是将这个China。给他再次注册到咱们的选择器上面去,就是去监听他的那个可读的这个事件啊,这里写下。
03:07
监听可读的这个状态。然后这个做到之后。大家注意啊,这步骤并没有完,大家要想一下啊,因为咱们做的是一个多人聊天室,不是只有一个人,是有很多人,所以这里边比如说我发了消息,那别的人是不是应该都能看到,所以咱第五步还要做些事情,就是把我们这里边,就是你的客户端给你发送过来,那个消息怎么样,是不是给他给其他人再发一遍,比如给其他客户端再发一次,这个过程中呢,咱们通过一个操作,就给他广播到其他的客户端里面去,让其他客户端都能看到你这个人发过来的消息。所以这个呢,就是我们处理可读状态操作的一个基本步骤,咱们把步骤做了一个说明,然后下面呢,我们就根据步骤把这个代码我们快速实现一下。
04:08
首先我们写第一步操作,咱们通过里边这个就是selection key,里边这个方法叫China。得到咱们这个就是已经就绪这个China,然后这个China呢,我给他就是强转向啊,咱们就转成这个so的这个China,我们给他强转一下。我在里边写一下啊。然后这里边啊,强转成叫so这个channel。这是我们做的第一部分,名字也换一下,然后这个过程咱之前讲到过啊,因为so channel它是不是就是里边啊有这么一个继承,包括实验的过程,就咱在里边可以直接做个强转啊,之前咱提到的这里不再重复了啊,咱直接用一下就可以了,然后这个做到之后,我们的第二个操作,咱把这个八法最后创建我们来一个be。
05:01
八块,我们叫BIT8块。等于BA buff.ocate加上一个1024,这是咱们buff创建或者一会儿读取做准备,然后这个做到之后,下面咱就做一个循环读的过程,那我来写一下啊,就是现在在里边我们用这个就是socket channel。点上这个就是read的这个方法里边加上咱这个BATB法,然后这里边会返回一个int类型这么一个值,这里边我给他改个名字啊,比如叫这个read的这个呃L啊,就叫这个名字啊,或者就叫read。认识。这是我们写写到的这么一个调用,然后里边有一常咱把它直接肉出去啊,就这么一个过程啊,然后这个写完之后,下面呢,咱在里边做一个判断,如果说这个值呢,它大于零,那就表示里边有数据,咱给它就是循环进行读就可以了。
06:07
我在里边写下啊,我们用这个瑞的N大于零,那我们来做这个读的过程,因为它的过程中呢,你发消息可能有多个,或者可能重复再发,所以咱为了能做到这个效果,我在外边呢,我写上一个变量。我来一个词缀,这变量起个名字啊,就叫SR啊,比如就叫这个。Message。等于一个空,然后在里边我们做上这么一个就是读的过程啊,首先先切换成这个读的这个模式,那我们用这个就是be buffer。点上这个Li方法做一个模式切换,切换之后咱就来读取里边这个内容,那我们用这里边的直接读,其实就是这个BAT8块就可以了啊,指咱们给他做一个编码的处理,我们用这个插set。
07:03
写下啊,点上这个full,加上这么一个就是UTF杠八。然后里边呢,点上里边这个方法叫抵扣的加上buffer,因为它是循环过程,所以咱们来一个加,等于是不是就循环往里边复制,所以现在我们把这个过程就完成了读取,这是咱们写的里边的第三步操作。然后这个做到之后呢,下面我们写第四步,就是把这channel呢给它再次注册到中,并且监听它的这个可读的状态,那我们来注册一下啊soet点上里边加上一个select,再加上它进行那个可读的那个状态,我们来一个selection。这个点上这个。
08:00
所以现在我们就再次做注册,然后注册之后呢,最后咱要把客户端的消息就是广播到其他的客户端中去,那这里边啊,我先写个输出,咱们一会儿再做个广播。比如说我这里输出一下啊,假如我现在就这里边这个message,如果里边有值,就是你发的消息,咱们来一个Les大于零,那我们就开始做这个广播的操作。这里边加个注释啊,就是广播给其他的这个。客户端这里边我先做个输出,咱们一会儿再进一步完善,所以大家注意啊,现在我就把这个处理可读状态的基本代码我们就完成了,就是里边的这个流程,一会儿咱再写这个广播的过程,现在这个基本结构就完成了,包括在里边我们也做了一个调用。
我来说两句