从已关闭的SSL套接字读取服务器

时间:2014-08-01 17:55:00

标签: java sockets ssl

我正在尝试使用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
    }
}

1 个答案:

答案 0 :(得分:2)

写入直到管道断开的异常已经错误。一旦它被打破,你既不会读也不会写。这与SSL无关:明文套接字的行为方式相同。您可能需要一个单独的阅读主题。