请问socket是关闭服务端还是服务端和客户端都要close?
来源:5-10 实现聊天室用户输入监听器:UserInputHandler(下)

EverL
2019-09-09
比如bio的UserInputHandler在收到了用户输入的quit之后是服务器单方面执行的close
写回答
1回答
-
同学你好~这里当服务器收到了客户端发来的quit命令时,就会关闭相应的writer。而关闭writer就会导致writer所包裹的stream和相应的socket也一起被关闭。
这个时候,对面的客户端还在持续的通过客户端的reader调用readLine()方法,而由于服务器端的socket此时已经关闭了,reader已经无法从所包裹的stream里读到任何数据了,所以readLine()会返回null值。由于我们在客户端一旦读到null值,就会跳出while循环而结束主线程(当然UserInputHandler线程也在发送完quit命令之后结束了),客户端进程也就结束了。
在这里,我们主动的去检测和处理另一端的服务器/客户端是否处于关闭的状态,以便我们可以用比较合理的方法处理客户端的退出。
112019-09-17
相似问题