我已经在stackoverflow上读了几篇 问题,但是它们都没有提供一个优雅的解决方案。
我知道调用Socket
上的isConnected()
和isClosed()
是无用的,因为它返回本地连接状态(如果服务器已连接-而不是我想要的客户端是否已连接)。
我也不能简单地调用if(socket.getInputStream().read()==-1)
*,因为这只会考虑到流的结尾(EOS)被到达-即客户端最近没有发送消息。然而,这根本不表示客户端已经断开连接。
我正在考虑让客户端在关闭套接字之前向服务器发送一条消息,让服务器知道它正在断开连接,但我想知道是否有一个更简单的解决方案-想要知道远程套接字的连接状态是一个非常普遍的愿望。谢谢。
*更不用说InputStream#read()是一个抽象方法了,我使用DataInputStream进行数据读取(例如readInt()、readByte()等)
read()
返回-1,readLine()
返回null,所有其他readXXX()
方法抛出EOFException
。 - user207421