【发布时间】:2014-09-24 23:54:30
【问题描述】:
我正在尝试通过 Java 客户端使用服务(Apple 的推送通知)。他们的文档指出,如果他们收到的数据有错误,他们会将一些错误代码写入套接字,然后将其关闭。 (在出现错误之前不返回任何内容。)
我有一个带有输入和输出流的 SSLSocket。我的代码写入输出流,直到它得到一个损坏的管道异常,然后尝试从输入流中读取。我从来没有看到任何返回的数据——就好像他们没有写承诺的错误代码就关闭了套接字。
在输出流上发生损坏的管道异常后,Java SSLSocket 实现中是否存在无法从套接字读取的内容(即 getInputStream() 的结果)?我没有关闭套接字输入或输出,或类似的东西。
还有其他想法吗?
我的代码如下所示:
SSLSocket socket = createMyConnectionToServer();
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
try {
while (true) {
outputStream.write(someStuff); // fails with broken pipe the second time
outputStream.flush();
}
} catch (SocketException ex) {
while (true) {
int b = inputStream.read();
if (b == -1)
break
System.out.println("response " + b); // this never happens
}
}
【问题讨论】: