ChatClient#send部分关于quit的处理
来源:7-9 NIO模型实现ChatClient_2

EverL
2019-09-09
UserInputHandler中不是已经处理了quit操作么?
不过那个处理没有关闭socket而是直接结束线程。但是如果老师想在send处理时在关闭socket,那么之前bio处理时ChatClient又没有进行这样的操作?也就是我这个问题的由来
写回答
1回答
-
同学你好~
关于BIO聊天室的退出处理,我已经在另外一个问题中回答过了~
在NIO模型实现中,当用户输入quit命令,我们需要有一个方法使得客户端的主线程可以从selector的select方法的阻塞调用中退出。在send()方法中检测到quit命令之后关闭selector,会使阻塞调用的select()抛出ClosedSelectorException异常。我们在截住这个异常的时候,就可以处理客户端的退出。我们使用这种方法来实现客户端,一个很重要的原因就是要为大家演示讲解select()可能抛出的这个ClosedSelectorException异常。
当然了,这不是唯一的一个处理客户端退出的方法。我也给大家留一个问题,你可不可以使用另一种方法来实现客户端的退出,而又不需要抛出ClosedSelectorException异常呢?实现完毕的同学可以提交你的代码(一个小提示,可以使用AtomicBoolean)
012019-09-17
相似问题