【发布时间】:2012-02-06 02:00:48
【问题描述】:
我在服务器端的每个连接都有一个线程。当客户端不发送命令时,服务器线程处于阻塞状态:
while ((commandHeader = fromNode.readLine()) != null) {
在从 TCP 套接字获得的 OutputStream 上内部调用 readLine()。 当我从另一个线程调用 socket.close() 时,此调用会以 SocketException 唤醒,并且可以终止线程。
但是,如果客户端醒来并决定发出命令,它就会执行
stream.writeBytes("something\n");
无限期阻塞。我知道这对 TCP 来说可能很好(它只是一个半关闭。) 我可能应该在退出时向客户发送一些东西,例如“QUIT\n”;它也可以只读取 EOF。但是,如果我在发送命令之前在客户端调用 readLine() 或其他读取操作,它们会在连接未关闭时阻塞等待数据。 客户端如何在尝试写入之前检测到连接已半关闭?
【问题讨论】: