嗨,我正在使用Apache HTTP Client
4.0基于HTTPS协议在服务器上上传一些文件。上载的应用程序每天24x7运行。今天突然间,它开始抛出此html" target="_blank">异常-
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)
谁能帮帮我吗?我完全不知道发生了什么事?
这是上传文件的源代码-
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;
}
我的猜测:端口用尽了,这个问题与您的代码不直接相关,而与服务器的当前状态有关。与其他计算机的连接过多,这会导致问题。
要找什么:
HttpClient
和重用这个实例。在某些情况下,实例化多个HTTP客户端并且未正确释放连接会导致网络连接堆叠并且永远不会关闭。尝试httpPost.releaseConnection()
。您可能也对HTTP客户端文档的第1.1.5章“确保释放低级资源”感兴趣。问题内容: 嗨,我有一个非常难看的问题:java.net.SocketException:没有可用的缓冲区空间(已达到最大连接?)这是客户端服务器应用程序。客户端是Windows XP SP2 32b,具有两个网卡核心对。Java 1.6。u7。应用程序打开了几个用于本地通信的服务器套接字,以及几个用于rmi到jboss服务器的客户端套接字。 几个小时/天后!我无法打开任何新的客户端套接字来与服务
我有使用TCP和UDP协议的应用程序。主要假设客户端通过TCP协议连接到服务器端,当连接建立后,发送UDP数据报。我必须支持两种连接到服务器的方案:-客户端在服务器运行时连接-客户端在服务器关闭时连接并重试连接直到服务器重新启动 在下面我附上类的源代码。所有源代码来自放置在官方Netty项目页面中的示例。我唯一误解的是我用非静态变量和函数替换了静态变量和函数。这导致了以后我将需要到多个服务器的许多
GSAIOException:错误代码:393238缓冲区溢出,没有可用空间 但我不知道这意味着什么。谁能解释一下是哪种例外。我可以在哪里搜索代码找到问题?
问题内容: 我在linux上有一个Java应用程序,它可以打开UDP套接字并等待消息。 在高负载下运行了几个小时之后,有一个数据包丢失,即数据包被内核接收,但不是由我的应用程序接收(我们在嗅探器中看到丢失的数据包,在netstat中看到UDP数据包丢失,我们没有看到这些数据包)在我们的应用日志中)。 我们尝试扩大套接字缓冲区,但这并没有帮助-我们早些时候就开始丢失数据包,仅此而已。 对于调试,我想
问题内容: 假设我想在syscall 上的Linux文件系统上写入1 GB的数据,这种情况发生在非常 繁忙的环境中 (许多相似的I / O并发)。什么是在区间的最佳缓冲区大小,说,这样做,当 不使用打开标志,或者 使用? 请没有“自己检查”的答案-我想从“文件系统”的家伙那里得到一些答案。 问题答案: 正如评论中所讨论的那样,我认为确切的大小并不重要,假设是: 文件系统大小的一小部分(请参阅Joa
问题内容: 在编写用于OpenGL库的Matrix类时,我遇到了一个问题,即使用Java数组还是使用Buffer策略存储数据(JOGL为Matrix操作提供直接缓冲区复制)。为了对此进行分析,我编写了一个小型性能测试程序,该程序比较了Arrays vs Buffers和Direct Buffers上循环和批量操作的相对速度。 我想在这里与您分享我的结果(因为我发现它们很有趣)。请随时发表评论和/或