我们有一个 java 服务器,它与 Android 客户端保持套接字 channel 打开,以便为我们的客户端应用程序提供推送功能。
但是,在将 Android 置于飞行模式后(我预计这会切断连接),服务器仍然可以写入与该 Android 客户端关联的 SocketChannel 对象,并且不会抛出任何错误。在写入之前调用 SocketChannel.isConnected() 返回 true。
我们缺少什么?移动设备对套接字的处理是否不同?
预先感谢您的帮助。
最佳答案
SocketChannel.socket().isConnected()
和 SocketChannel.isConnected()
在连接套接字之前返回 false。
套接字连接后,它们将返回 true,
他们不会因任何原因恢复为 false。
SocketChannel.isOpen()
返回真
直到您调用 SocketChannel.socket().close()
或 SocketChannel.close()
。
一旦您在套接字上调用了close(),SocketChannel.isOpen()
将
返回假,
没有其他事件会导致它返回 false。
SocketChannel.socket().isClosed()
返回 false
直到您调用 SocketChannel.socket().close()
或 SocketChannel.close()
。
一旦您在套接字上调用了close()
-
SocketChannel.socket().isClosed()
将返回 true,
没有其他事件会导致它返回 true。
关于java - 写入应该关闭的 java 套接字 channel 不会产生异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2786647/