请问socket是关闭服务端还是服务端和客户端都要close?

来源:5-10 实现聊天室用户输入监听器:UserInputHandler(下)

EverL

2019-09-09

比如bio的UserInputHandler在收到了用户输入的quit之后是服务器单方面执行的close

写回答

1回答

Stannum

2019-09-17

同学你好~这里当服务器收到了客户端发来的quit命令时,就会关闭相应的writer。而关闭writer就会导致writer所包裹的stream和相应的socket也一起被关闭。

这个时候,对面的客户端还在持续的通过客户端的reader调用readLine()方法,而由于服务器端的socket此时已经关闭了,reader已经无法从所包裹的stream里读到任何数据了,所以readLine()会返回null值。由于我们在客户端一旦读到null值,就会跳出while循环而结束主线程(当然UserInputHandler线程也在发送完quit命令之后结束了),客户端进程也就结束了。

在这里,我们主动的去检测和处理另一端的服务器/客户端是否处于关闭的状态,以便我们可以用比较合理的方法处理客户端的退出。

1
1
EverL
非常感谢!
2019-09-17
共1条回复

系统学习Java网络编程 深度理解BIO/NIO/AIO

对比式学习助你真正理解BIO/NIO/AIO三大网络编程模型。

880 学习 · 148 问题

查看课程