Java套接字 - 在没有输入流的情况下检测网络断开连接

时间:2012-01-05 16:49:29

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

我最近一直在编写Java代码来向Apple推送通知服务器发送通知。我遇到的问题是如果我创建套接字然后断开与网络的连接。我已经在网上发表文章,大多数人都建议依赖这些方法:

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

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

2 个答案:

答案 0 :(得分:0)

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

服务器无需为您编写任何内容以尝试读取它。如果你有一个永不写入的服务器,你将不读或检测到失败。

答案 1 :(得分:0)

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

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