我有一个Java TCP服务器,当客户端连接到它时,每30秒向客户端输出一条消息。严格要求客户端不向服务器发送任何消息,服务器也不能向客户端发送除30秒间隔消息之外的任何数据。
当我断开客户端时,服务器将在下一次尝试向客户端写入时才会意识到这一点。因此,服务器可能需要长达30秒的时间才能识别到断开连接。
我想要做的是每隔几秒钟检查一次是否已经断开连接,而不必等待,但我不确定如何做到这一点,因为a)服务器不接收来自客户端的数据,b)服务器不能发送任何其他数据。请问有人能够给予一些指导吗?谢谢。
当我断开客户端时,服务器将在下一次尝试向客户端写入时才会意识到这一点。因此,服务器可能需要长达30秒的时间才能识别到断开连接。
我想要做的是每隔几秒钟检查一次是否已经断开连接,而不必等待,但我不确定如何做到这一点,因为a)服务器不接收来自客户端的数据,b)服务器不能发送任何其他数据。请问有人能够给予一些指导吗?谢谢。
setSoTimeout()
,但当我强制关闭客户端时,似乎这并不起作用,而这是我的一个测试之一。 - Mynselect()
。你使用setSoTimeout()
是正确的,因为那是你唯一的选择。你应该在从socket读取之前调用它,如果超时的话,它会抛出一个InterruptedIOException
异常。虽然有点凌乱——如果你能使用NIO,我可以给你一个如何使用的例子。 - Brian Roachjava.net.SocketTimeoutException
异常,我刚试过了。 - Brian Roach