采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
UserInputHandler中不是已经处理了quit操作么?
不过那个处理没有关闭socket而是直接结束线程。但是如果老师想在send处理时在关闭socket,那么之前bio处理时ChatClient又没有进行这样的操作?也就是我这个问题的由来
同学你好~
关于BIO聊天室的退出处理,我已经在另外一个问题中回答过了~
在NIO模型实现中,当用户输入quit命令,我们需要有一个方法使得客户端的主线程可以从selector的select方法的阻塞调用中退出。在send()方法中检测到quit命令之后关闭selector,会使阻塞调用的select()抛出ClosedSelectorException异常。我们在截住这个异常的时候,就可以处理客户端的退出。我们使用这种方法来实现客户端,一个很重要的原因就是要为大家演示讲解select()可能抛出的这个ClosedSelectorException异常。
当然了,这不是唯一的一个处理客户端退出的方法。我也给大家留一个问题,你可不可以使用另一种方法来实现客户端的退出,而又不需要抛出ClosedSelectorException异常呢?实现完毕的同学可以提交你的代码(一个小提示,可以使用AtomicBoolean)
明白了,需要关闭的资源不同,导致了不同的处理。不过Selector也可以在通过ChatClient实现一个回调接口来实现,然后UserInputHandler触发回调吧?
登录后可查看更多问答,登录/注册
对比式学习助你真正理解BIO/NIO/AIO三大网络编程模型。
1.4k 1
877 5
883 5
841 5
878 5