【问题标题】:Java Sockets - Detect network disconnect without inputstreamJava Sockets - 在没有输入流的情况下检测网络断开连接
【发布时间】:2012-02-03 12:03:04
【问题描述】:

我最近一直在编写 java 代码来向 Apple Push Notification 服务器发送通知。我遇到的问题是如果我创建套接字然后断开与网络的连接。我在网上翻了几篇文章,大多数人建议依靠这些方法:

socket.setKeepAlive(false);
socket.setSoTimeout(1000);

特别是“setSoTimeout”方法。但是 javadoc 声明 setSoTimeout 只会在从 InputStream 读取时抛出异常。但是 Apple 推送通知服务器从不将任何数据放在 InputStream 上,因此我永远无法从中读取任何内容。有没有人对如何在不使用套接字 InputStream 的情况下确定网络断开连接有任何建议?

【问题讨论】:

标签: java sockets networking push-notification apple-push-notifications


【解决方案1】:

只有当您尝试从 Socket 写入或读取时,您才能可靠地检测到 Socket 已断开连接。阅读更好,因为写作通常需要一段时间才能发现失败。

服务器不需要为您编写任何内容来尝试读取它。如果你有一个从不写的服务器,你要么什么也不读,要么检测到故障。

【讨论】:

    【解决方案2】:

    快速精确:如果您使用增强的通知格式并且发生一些错误,APNS 将在您的 InputStream 上返回数据。因此,您应该确保不要忽略您的 InputStream...

    除非您将此作为个人学习项目,否则您可能需要查看为您处理所有通信细节的existing APNS-specific Java libraries。与 APNS 进行可靠通信比最初看起来要困难得多,尤其是当您进入涉及各种模糊或未记录细节的错误管理部分时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多