Я использую следующий код для чтения HTTP-запроса формы данных. В общем случае он работает хорошо, но некоторое время "httpURLConnection.getResponseCode()" бросает java.net.BindException: адрес уже используется: connect
............
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. Спасибо вам
Избавьтесь от disconnect() и закройте Reader. У вас закончились локальные порты, и использование disconnect() отключает пул соединений HTTP-соединений, что является решением этого.
После полного чтения потока вам нужно close()
Reader
. Это освободит основные ресурсы (сокеты и т.д.) Для последующего повторного использования. В противном случае система будет исчерпана.
Основная идиома Java IO для вашего случая следующая:
Reader reader = null;
try {
reader = new InputStreamReader(connection.getInputStream(), charset);
// ...
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}