如何判断套接字是否已断开连接(Java)

时间:2013-12-12 18:24:28

标签: java sockets stream inputstream

我已经在堆栈溢出上阅读了several questions,但是没有一个能为我提供优雅的解决方案。

我知道在isConnected()上调用isClosed()Socket是没用的,因为它返回本地连接状态(如果服务器已连接 - 如果客户端已连接,则不会要)。

我也不能简单地调用if(socket.getInputStream().read()==-1) *因为这只会考虑到达流的末尾(EOS) - 即,客户端最近没有发送消息。这根本不表示客户端已断开连接。

我正在考虑让客户端向服务器发送消息,让它知道它在关闭套接字之前就已断开连接,但我想知道是否有一个更简单的解决方案我缺少 - 想知道连接状态远程套接字是一个相当普遍的愿望。感谢。

*更不用说InputStream#read()是一个抽象方法的事实,我使用DataInputStream进行数据读取方法(即readInt(),readByte()等)。

1 个答案:

答案 0 :(得分:1)

  

我正在考虑让客户端向服务器发送一条消息,让它知道它在关闭套接字之前就已关闭了,

为什么呢?这是毫无意义。您将阅读此消息,而不是从read()获取-1。后者就是你所需要的。你帖子中的额外 read()当然是个坏主意,但是读取消息的read却不是。你需要它,你将从中获得EOS。你不需要额外的消息来告诉你同样的事情。