java - 写入应该关闭的 java 套接字 channel 不会产生异常

标签 java android exception sockets

我们有一个 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/

相关文章:

c++ - 调用可以在 C++ 中抛出异常的函数的析构函数

java - 什么是Java : NoSuchElementException error?

java - BIRT 报告错误列绑定(bind)

java - 序列化 CompletableFuture 字节码

java - 使用带有数组的compareTo方法按姓名和考试成绩对学生进行排序

Android Eclipse - 单击多个按钮会使我的应用程序快速崩溃

java - 通过 Activity 快捷方式启动时,如何在字段中设置数据库中的特定数据?

Java重复(?)答案

android - ElementList SimpleXML 中的空条目

c# - 在 C# 中处理异常时,如何压缩大量小的 Try-Catch block ?