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