java sockets connection httpclient socketexception

java.net.SocketException: no hay espacio disponible en el búfer(¿se alcanzaron las conexiones máximas?): connect



sockets connection (4)

Hola, estoy usando Apache HTTP Client 4.0 para cargar algunos archivos en un servidor basado en el protocolo HTTPS. La aplicación cargada se está ejecutando 24x7. Hoy de repente comenzó a arrojar esta excepción-

java.net.SocketException: No buffer space available (maximum connections reached?): connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source) at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:333) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:101) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:381) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)

¿Alguien puede ayudarme por favor? No tengo ni idea de lo que está pasando?

Este es el código fuente que carga el archivo -

public File call() throws Exception { HttpClient httpclient = new DefaultHttpClient(); try{ httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); /* * Create POST REQUEST */ HttpPost httpPost = new HttpPost(this.URL); /* * Create MultipartRequestEntity */ MultipartEntity multipartEntity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE ); /* * Add POST Parameters */ multipartEntity.addPart(parameters[0], this.fileBody); multipartEntity.addPart(parameters[1], new StringBody(this.TYPE)); multipartEntity.addPart(parameters[2], new StringBody(this.MAAID)); /* * Add this POST Method */ httpPost.setEntity(multipartEntity); /* * Upload the file */ HttpResponse response = httpclient.execute(httpPost); int responseCode = response.getStatusLine().getStatusCode(); logger.info("Response Code of HTTP Connectivity ["+ responseCode + "], " + "it means ["+ response.getStatusLine().getReasonPhrase()+"]"); /* * Check the server Response */ HttpEntity entity = response.getEntity(); if(entity != null){ String status = EntityUtils.toString(entity); logger.info("Status of file upload from Server >>"+ status+"<<"); entity.consumeContent(); if(status.equalsIgnoreCase("OK")){ return this.fileBody.getFile(); } }else{ logger.error("Unable to retrieve status of file upload from server"); } }catch(NoRouteToHostException e){ logger.error("Internet connection to ["+ this.URL + "] is not available", e); }catch(SocketException e){ logger.error("Unable to connect to "+ this.URL, e); }catch (Exception e) { logger.error("Exception while uploading the file["+ this.fileBody.getFilename()+ "] on ["+ this.URL+"]", e); }finally{ try{ httpclient.getConnectionManager().shutdown(); }catch(Exception e){ // Ignore this exception } } return null; }


Puede suceder porque su servidor (base de datos / Http) está agotado de conexiones. Usar un grupo de conexiones o reducir las conexiones máximas puede solucionar este problema.



Esto parece ser un problema de Windows, ya sea sobre puertos efímeros, o sobre un error en afd.sys, dependiendo de su versión de Windows. Por favor, consulte mi respuesta a una pregunta similar sobre


Mi suposición: se está quedando sin puertos y el problema no está directamente relacionado con su código sino con el estado actual de su servidor. Demasiadas conexiones se abren en otras máquinas y esto causa el problema.

Qué buscar:

  • ¿Está su servidor bajo un uso intensivo que podría provocar la apertura de múltiples conexiones de red?
  • La documentación del cliente HTTP recomienda crear una instancia de solo un HttpClient y reutilizar esta instancia. Son casos en los que crear instancias de múltiples clientes HTTP y no liberar conexiones correctamente hace que las conexiones de red se acumulen y nunca se cierren. Intenta con httpPost.releaseConnection() . También podría estar interesado en la documentación del cliente HTTP, capítulo 1.1.5, "Garantizar la liberación de recursos de bajo nivel"