00:02
各位同学大家好,下面呢,我们继续来完成多人聊天室客户端的部分,咱们下面来完成,就是接收服务端响应的数据,把这个我们做到,而这部分我们要做的是什么事情呢?给各位说一下啊,比如现在我客户端连上的服务端,那这时候服务端给咱是不是要返回一个消息,也就这个消息说欢迎进入聊天室,请注意隐私安全,那这个值咱是不是要得到,所以咱们就来主要做这么事情,就是专门负责接收服务端返回的数据,那这过程怎么做呢?给各位来具体说一下啊。各位注意啊,这个过程跟咱们刚才写服务端代码是不是类似,那它做法怎么做呢?咱是不是也是就是一直循环下去,然后查询咱的这个通道里边是否有这个可读状态这么内容,如果有的话,我们进行相应的处理,如果没有的话,那我们做其他处理,所以跟刚才代码应该说是类似的,但是因为咱们这过程中呢,因为咱会有多个客户端进行实现,所以这里边呢,我们就需要新建一个新的一个线程,然后把这过程最终做处理,那下面呢,我们就继续来做一下这个代码,给各位来写一下这个过程。
01:25
那咱们来到客专中,我们写一下啊。首先里边的第一部分,咱们还是通过。点上一个open方法,创建出一个这么一个对象,那我写一下啊。然后做到之后下步操作,咱们这里边就是把我们那个socket China先设置成一个非阻色的这么一个模式,这是我们的第二部分,然后第三部分把soet在咱们的S里边,是不是要做一个注册呀,加上select,加上它那个状态,我们来一个selection。
02:11
点上里边肯定是一个read,就是读的这么一个状态,这个我们就做到了,然后做到之后呢,咱下面怎么做呢?咱是不是要就是创建这么一个线程,然后通过线程来完成里面的过程,所以咱们要新建一个线程。那这个怎么做呢?创建线程有多种方式,你可以直接上一个threat,然后通过reval LA的表达式形式做到,但是咱为了看它更明显,这个里边呢,给各位新建一个线,成一个类,在类里边呢,专门来做这个就是相关这个读的这个处理啊,那我们来写一下啊,就是现在比如说我在卡特里边,咱们再来建个类。这个类我起个名字就叫这个这个thread。
03:02
咱就叫这个名字,然后创建之后呢,因为咱是一个线成一个类,所以我们让它呢,直接实现咱们的一个接口,就这个run内部接口,然后实现接口之后,需要实现接口里面这个方法,就这个run方法,这是我们写到的,然后在run方法中就是做的就是咱们刚才负端过程,咱们查通道就那个channel,看channel里边是否是这个可读的这个状态,如果是可读,那我们执行我们后续的处理,比如说代码和刚才是一样的,那我就把刚才代码给各位就直接复制过来。啊,当然这个代码你可以写到一个方法中去,我这里边就直接复制了啊,就是这段代码。我把它直接拿过来。然后放到我们这里边。呃,是另外一个类啊,不是这个类,这个类里边啊,给他直接拿过来,咱们给它快速改一下这个代码啊。
04:00
在这个代码中呢,首先有一个select这个选择器,但是选择器呢,咱就通过我们那个类给他传过来,那我这里边写上一个private这个。加上就是里边用它的这个有构造给它过来,然后加上它那个有构造啊,咱们来一个public。在里边加上我们这个就是。然后咱们再加上一个this.select等于这个select,这样的话,咱一会儿通过它的有参构造,把这个选择器set给它直接传过来就可以了。然后这个写好之后,我们继续往下看啊,在里边我们做这个相应这个处理啊,这位置有异常,但是这异常呢,我们需要给它来一个try catch捕获一下啊,因为这个我们没法植入数据,直接来一个catch捕获一下。
05:04
在catch里边,我们就直接加上它这个。Exception。然后把这个代码我们直接给它复制到这个里面来。然后咱们再检查一下啊,在这过程中,前面代码应该不需要变。也就是在里边呢,获取到你这个channel,然后获取之后里边判断啊,就是它里边什么状态,咱目前应该不需要这个save状态,我们只需要这个读的这个状态,就这个状态,如果是读的状态,那我们做这处理,这处理中一个方法,这个方法我们也给它也是复制过来,就这个方法read operator。给他直接拿过来。然后拿到我们的这个里面来。啊,就是这个位置。拿回来之后我们看一下啊,这些方法应该不需要过多变化,只是这句话不需要,因为它不需要广播,直接把服务端的数据在控制台输出就可以了,所以现在咱把这个线程这个类我们就完成了,完成之后呢,咱们在回到咱们客户端这个代码中,在这行我们就创建线程进行实现,那我们就直接。
06:19
上一个。在里边上,咱们刚才这个线程类叫client,里边传入咱们的选择器,最终在调用里边这个大的方法,咱们来把线程进行创建,所以咱们通过这个代码把这个过程我们就完成了,这就是咱们写的客户端这个代码,咱们这么一个实现。然后这个写完之后呢,其实咱们目前的核心部分应该都完成了,但是咱的代码需要几个地方,咱们需要进一步完善一下,但是核心部分应该已经做到了。那下面呢,我们完善一下啊,大家注意,因为咱们现在会有多个客户端进行这么一个过程,所以咱们为了区分多个客户端,我就在这个大的可的里边,咱给它加上一个参数,那我写一下啊,比如这参数我就叫name,然后最终呢,咱在发送消息的时候,我就有这个消息,同时带上我们这个name这个值,比如说我这个张三或者说李四或者王五,咱们把这个值给他带过来啊,这里边我就加上这么一个冒号,表示由他发送消息,比如张三发送消息,李四发送消息,这里边我们都有处理,所以现在这个代码我们就完成了。
07:44
完成之后呢,最后咱们把代码可以做一个最终的测试。那我们看一下啊,怎么测试。首先呢,就是为了测试更加明显,我在里边呢,就创建多个客户端的类,然后在多类里边都来调这个差的,看看里面这个方法再实践,就为了一会儿更明显,那我这里边比如说啊,我就建三个类,比是第一个类,就是这个a client。
08:11
这是第一个,然后在里边我们加上这么一个问方法,问方里边直接上这个client。就这chart。Client,然后里边这个start方法,咱们传入一个名字,比如说第一个人我们用这个,就是比如这个Lucy啊,他做了一个发送,这里边有异常加上一个TRY开捕获一下,然后咱们用投放方式,比如说我再创建一个,为了咱们明显啊,这个我就叫B。在B中,咱给他改个名字,这个人我就叫Mary,然后咱们也是做这个操作,所以现在这个多人聊天室的代码,我们就最终完成了,就是里边的这个过程。然后这个完成之后呢,我们再检查一下啊,刚才有一个地方我是给它注掉了,咱们看是否打开啊,就是这个地方广播到掐客户端,所以现在应该没有问题了,那最后我们来测试一下,看一下过程,那怎么测试给各位说一下啊,咱们现在就是启动三个,这个就是内容,第一个是咱的服务端,我把这个先启动。
09:22
大家给他启动一下啊,然后提示说我们这里边服务端已经启动了,然后第二个是A客户端和B客户端,咱就模拟两个人进行聊天的过程,那我现在把A客户端先启动。然后启动你注意啊,它提示说欢迎进入聊天室,请注意隐私安全,这是不是就得到服务端给咱们小那个消息,然后我现在把B客户端也做个启动,我们看一下这里边是不也提示我们说欢迎进入聊天室这个提示信息,而现在比如说啊,我在里边这个B客户端中,咱来发送一个消息,我随便写一个啊,就说这个。
10:01
我是这个啊,再看B是谁啊,我是这个Mary。回车,然后咱看一下,你看啊,在A里边是不是收到了,说我是Mary,比如说A我也发个消息,咱写一下啊,说我是这个。Lucy回车,然后你看B里边是不是也收到了,所以现在啊,这过程中两人坐着聊天,比如说我再试一个啊,说我。今年啊,要去这个。美国就是这个。他说的啊,然后咱们看里边,迈瑞说我今天要去美国,然后Lucy也说了,说我啊,早就去过美国了。啊,去过美国了,咱再说,比如说还是。中国好啊,中国好,然后咱们再看里边他也收到Lucy给他发的消息了,所以大家看啊,现在咱就把这个多人聊天室的效果我们就最终完成了,这就是我们通过Java n IO这个相关知识点完成了一个综合例子就是。
11:03
多人聊天室的这个综合案例。
我来说两句