请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

ChatClient#send部分关于quit的处理

UserInputHandler中不是已经处理了quit操作么?

不过那个处理没有关闭socket而是直接结束线程。但是如果老师想在send处理时在关闭socket,那么之前bio处理时ChatClient又没有进行这样的操作?也就是我这个问题的由来

正在回答

1回答

Stannum 2019-09-17 08:42:30

同学你好~

关于BIO聊天室的退出处理,我已经在另外一个问题中回答过了~

在NIO模型实现中,当用户输入quit命令,我们需要有一个方法使得客户端的主线程可以从selector的select方法的阻塞调用中退出。在send()方法中检测到quit命令之后关闭selector,会使阻塞调用的select()抛出ClosedSelectorException异常。我们在截住这个异常的时候,就可以处理客户端的退出。我们使用这种方法来实现客户端,一个很重要的原因就是要为大家演示讲解select()可能抛出的这个ClosedSelectorException异常。

当然了,这不是唯一的一个处理客户端退出的方法。我也给大家留一个问题,你可不可以使用另一种方法来实现客户端的退出,而又不需要抛出ClosedSelectorException异常呢?实现完毕的同学可以提交你的代码(一个小提示,可以使用AtomicBoolean)

0 回复 有任何疑惑可以回复我~
  • 提问者 EverL #1
    明白了,需要关闭的资源不同,导致了不同的处理。不过Selector也可以在通过ChatClient实现一个回调接口来实现,然后UserInputHandler触发回调吧?
    回复 有任何疑惑可以回复我~ 2019-09-17 09:43:35
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信