00:01
各位同学大家好,下面呢,我们继续完成NIO多人聊天室的功能,刚才呢,咱们把服务端代码已经完成了,那下面呢,我们开始写这个客户端代码,我们下面咱们开始写下啊。首先第一个呢,在里边我也创建一个就是启动客户端的这么一个方法,那我们来写个方法,咱们来一个public,然后我起名叫start。把这个方法我们先做个创建。然后创建之后在里边写代码,那这个代码怎么做呢?首先第一部分咱是不是要先连接上咱的服务器端,只有连上之后能做操作,然后第二个那咱们就是向我们的服务器端来发送咱们的消息。然后发送消息之后。
01:00
下面呢,咱们就要接收到服务器端给我们发送过来这个响应的这个数据,比如说咱们看到啊,刚才咱在服务端中,当我就是这里边,比如说。我连上服务器端之后,给咱是不是要返回这个消息,所以这个消息咱们要接收到,那下面呢,把代码我们来写一下啊,首先第一部分咱先连上这个服务器端,那我们用这个socket channel。里边的open方法,咱们做一个连接,返回的就是这个socket channel。然后写完之后,在open方案里边,我们传入它的参数。首先第一个参数就是咱的主机的IP,咱们传一个127.0.0.1,然后第二个参数是你的端口号,我刚才服务器端端口号我们来看一下,应该是这个8000的端口号,咱们把它直接拿过来,所以这是我们里边的第一步操作。
02:04
咱们通过这个open方法,我们去做这个操作啊,当然在里边咱们需要上这么一个对象啊,然后里边写上这么两个参数。所以现在啊,我们把里边的第一步就完成了,由异常给他直接走了出去,然后这个做到之后,第二部分呢,咱们先写下向服务器端发送消息过程,然后咱们再写接收过程,这个发送过程之前咱是写过的,这里边我再实验一下啊,用这个看。等于这个就是new上一个。里边加上一个system in,就是通过控制台咱们做一个输入,然后做到之后下面的我们加上一个while循环,从咱们控制台里边的内容中把这值给它得到,用scanner点上这个叫哈希nice啊,就咱们是一行一行给它得到下。
03:06
来,然后这个我们便利之后,下面再来取到它的这个每行的内容,用这个N。这个烂方法来取到,然后取到之后咱给它起个名字,这个名字比如我叫FG,现在把这个值我们就取到了。然后取到之后呢,这里边呢,咱们做个判断,如果这个值它不等于空,就有数据,那那把数据就发送给我们的副端。那里边我们快速写一下啊,MSG点如果说它大于零,那就表示有数据,那咱通过socket里边的方法,咱们在里边也是一个点上这个。加上一个UTF杠八。
04:00
然后咱们。再点上一个已扣的,加上你那个消息就是MSG,所以这样的话呢,咱们把这个过程我们就完成了,向服务器端发送消息,这是我们做到的,然后做到之后呢,下面咱先做个测试,就验证一下咱们这个客户端跟服务端的连接,也就是说我们发送到这个消息,那在我服务端应该是能接收到的,接收之后我这里边应该做了一个处理,也就是在这个位置我们看一下啊,这里边咱把它最终说做输出啊,这广播代码我先注掉,咱一会儿再打开,咱先做个测试,看我客户端跟服务端这个过程,就是服务端应该能接收到客户端发送过来的消息,这消息咱在控制台也做了输出。然后这个我们就完成了,完成之后我们写个main方法测试一下new上这么一个叫这个client。
05:02
点上一个start client,这样的话,这个代码我们就写出来了,然后下面我们来做个测试,看一下最终的结果。首先啊,咱们把这个服务端我们先启用起来。这里边我们做个启动,然后提示我们说服务端已经启动成功了,下面呢,咱们再把客户端做个启动。启动之后在客户端里边,比如说我输入一个内容啊,就是hello at硅谷,咱们回车正确的话,服务端应该能接收到,但是大家发现服务端是没有,那证明咱们代码应该是有问题的,那下面咱们来看一下啊,代码中哪个地方写的不对,我们来调试一下这个问题啊。首先我们怎么调试呢,咱们就来到我们的服务端,在服务端中呢,比如首先呢,这里边我先给他打上这个断点。
06:00
啊,打一下断点,那断点呢,我就打到这个位置,比如我们现在啊,这里边有这个self的状态,这是读的状态,我在这个位置加个断点,然后在这方法中也叫断点,那我们看一下问题是什么啊,首先服务端我们用debug的方式先行起来。这里边已经启动了,然后客户端还是普通方式进行启动。启动之后,在客户端里边咱们输一个内容,比如内容我就叫哈at硅谷回车,然后大家看服务端是不是接收到了,他直接到咱这个就是可读这个状态中,那咱们往下执行看一下,到我们这个方法中,然后到缓冲区咱们读数据,然后咱们看啊,这里边它的长度是13。然后咱们往下执行,我们看这个message数据是不是就是hello硅谷,但是这里边我们再执行,呃,大家看问题啊,不知道各位是否能看到我这里代码好像写错了,我写的是不是一个while循环呀,这么写的话会有什么问题,它是不是叫无限循环下去,所以这里边肯定不能写Y,咱要写的是不是一个if,我只想判断里边数据有没有,如果大于零表示有,那咱们再读,如果它比如说不大于零,那就没有,那咱不需要读,所以这个不应该写while,应该写if就可以了,你写while,那它就永远循环下去啊,所以问题我们就快速定位到了,那把代码咱改一下,改成if。
07:32
就是这么一个问题,所以咱们找到了啊,然后找到之后我把这服务器重新启动一下,我们最终再测试一下啊。首先,服务器端启动。提示我们启动成功,再启动客户端,在客户端里边呢,我们输入一个内容,比如说来一个中文啊,因为咱也做了转码,比如你好,这个上硅谷咱们回车,然后看服务端中这个内容消息是不是给我们就输出了,比如说咱们再试一个,我来一个哈。
08:04
啊哈,这个at硅谷回车,然后咱们看服务端中这个值是不是也得到了,所以现在我们就完成了客户端跟服务端这个交互的过程,也就是说客户端发送消息,服务端是能够得到的啊,报告单一会儿会启动多个线程,最终做这个广播的过程,但是目前这个交互过程应该已经现出来了,所以各位把这代码能给他做到。
我来说两句