已在使用地址:读数据从HTTP响应很少抛出的BindException(Read Data From

2019-09-29 20:22发布

我用下面的代码来读取数据形式的HTTP请求。 在一般情况下它的作品不错,但经过​​一段时间“httpURLConnection.getResponseCode()”抛出java.net.BindException:已使用的地址:连接

     ............
     URL url = new URL( strUrl );
     httpURLConnection = (HttpURLConnection)url.openConnection();
     int responseCode = httpURLConnection.getResponseCode();
     char charData[] = new char[HTTP_READ_BLOCK_SIZE];
     isrData = new InputStreamReader( httpURLConnection.getInputStream(), strCharset );
     int iSize = isrData.read( charData, 0, HTTP_READ_BLOCK_SIZE );
     while( iSize > 0 ){
            sbData.append( charData, 0, iSize );
            iSize = isrData.read( charData, 0, HTTP_READ_BLOCK_SIZE );
     }
     .................





 finally{
            try{
                if( null != isrData ){
                    isrData.close();
                    isrData = null;
                }

                if( null != httpURLConnection ){
                    httpURLConnection.disconnect();
                    httpURLConnection = null;
                }

                strData = sbData.toString();
             }
            catch( Exception e2 ){
            }

关于Java 1.6上运行的代码,Tomcat的6.谢谢

Answer 1:

摆脱断开()和关闭阅读程序。 您正在运行的本地端口,并使用断开()禁用HTTP连接池是解决这一点。



Answer 2:

您需要close()Reader完全读取流之后。 这将释放以备将来使用底层资源(插座等)。 否则,系统将耗尽资源。

基本的Java IO成语你的情况如下:

Reader reader = null;
try {
    reader = new InputStreamReader(connection.getInputStream(), charset);
    // ...
} finally {
    if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}

也可以看看:

  • Java的IO教程
  • 如何使用URLConnection的?


文章来源: Read Data From Http Response rarely throws BindException: Address already in use