服务器端Socket连接close后,客户端Socket.isClosed()为何还是false
服务器端Socket连接关闭后,就是调用Socket.close(),好像在客户端调用socket.isClosed()方法还是false,理论上应该是true才对,还有同样情况,客户端调用Socket.isConnected()也是true,我觉得也应该为false才对。
是否要
Java code
Socket.shutdownInput();
Socket.shutdownOutput();
Socket.close();
才能正真的达到关闭的效果呢?
------解决方案--------------------Socket.close();并不是真正意义上关闭,由于流还依然在缓存中,只有等到缓存全部清楚后才会真正的去关闭。
------解决方案--------------------先调用socket.getInputStream().close()
socket.close()
然后socket的isClosed()
先关闭流然后再关闭socket
------解决方案--------------------有默认等待的时间,close方法不能立即关闭
------解决方案--------------------参考这个文章:
http://www.w3china.org/blog/more.asp?name=hongrui&id=24039
------解决方案--------------------5楼正解.
------解决方案--------------------isClosed()方法是判断客户端是否已经调用过close()方法了。这个方法并不是判断服务端是否已经断开连接了
怎样判断服务端已经断开了连接的方法,我这里还没有。
但是,在服务器端已经断开连接的情况下,IO操作会抛出异常的。当然,如果要非阻塞的判断服务器端是否断开连接,
楼主试试InputStream.available()这个方法吧。具体我也没试过,看看返回值,有没有-1的情况
------解决方案--------------------
------解决方案--------------------UDP通信要连接啊,不用这么操心吧?
------解决方案--------------------结束了一方通信就行了