间歇性"套接字关闭" HttpUrlConnection异常

时间:2014-06-27 07:27:38

标签: java sockets httpurlconnection

我有一个在jboss 7.1.1 / java 1.7下运行的servlet应用程序,它将http请求发送到另一台服务器。大多数时候一切正常,但偶尔(每天一到几次)我们得到一个“Socket closed”例外。我一直试图找出可能导致这种情况的原因,但到目前为止我还没有成功。顺便说一句,当应用程序在旧版本的Jboss / Java下运行时,这种情况一直在发生,因此版本可能不那么相关。

以下是发生这种情况的方法的摘录:

。 。 。 。

try

{

    HttpURLConnection conn = (HttpURLConnection) urlEndpoint.openConnection();
    conn.setRequestMethod("POST");
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
    conn.setRequestProperty("charset", "UTF-8");
    DataOutputStream out = new DataOutputStream(conn.getOutputStream());
    out.write(env.getBytes("UTF-8"));
    out.flush();
    out.close();
    InputStream iss = null;
    conn.connect();
try
{
    iss = conn.getInputStream(); // this is where the exception is caught

。 。 。 。 。

这就是异常的样子:

。 。 。 。 。

java.net.SocketException: socket closed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:633)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:579)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1322)               

。 。 。 。 。

我遇到了一些提到http连接正在保留的套接字池的帖子,但我不确定这是否以及如何帮助我解决我遇到的问题。

我现在已经用尽了所有的想法,如果有任何帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

在执行任何I / O之前调用conn.connect() 会更有意义。之后做这件事没有任何意义。您无需关闭输出流。