2

我最近一直在编写java代码来发送通知到Apple推送通知服务器。我遇到的问题是如果我创建套接字然后断开与网络的连接。我附近反弹上线的文章,最建议依托方法:Java套接字 - 检测没有输入流的网络断开连接

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

具体的“setSoTimeout”的方法。但javadoc声明setSoTimeout只会在从InputStream读取时引发异常。但Apple推送通知服务器从不在InputStream上放置任何数据,所以我永远不能读取任何数据。有没有人有任何建议,如何确定网络断开连接,而不使用套接字InputStream?

+2

请参阅http://stackoverflow.com/questions/22720/configure-a-java-socket-to-fail-fast-on-disconnect和http://stackoverflow.com/questions/2028620/java-sockets-和下降的连接。 – 2012-01-05 16:52:30

回答

0

只能可靠地检测插槽已经断开当您试图写入或读取套接字。阅读更好,因为写作通常需要一段时间才能检测到故障。

服务器并不需要写什么东西可以尝试阅读。如果您有一台永远不会写入的服务器,您将不会读取任何内容或检测到故障。

0

快速精度:APNS会,如果你使用的是增强型通知格式上您的InputStream返回数据,并出现了一些错误。因此,您应该确保您不会忽略您的InputStream ...

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