我写了一个java代码,如下所示
String fulldetails ="";
String line="";
String result="";
URL url;
HttpURLConnection conn;
BufferedReader rd;
String country="";
String region="";
String city="";
String zipcode="";
try
{
String ip = "xxx.xxx.xx.x";
url = new URL("http://xxx.xx.xxx.x:2298/api/sample?ip="+ip);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = rd.readLine()) != null)
{
result += line;
}
System.out.println(result);
rd.close();
result = result.substring(1, result.length()-1);
JSONObject json_object = new JSONObject(result);
country = (String) json_object.get("Country");
System.out.println(country);
region = (String) json_object.get("Region");
System.out.println(region);
city = (String) json_object.get("City");
System.out.println(city);
zipcode = (String) json_object.get("ZipCode");
System.out.println(zipcode);
fulldetails = "Country:"+country+",Region:"+region+",City:"+city+","+"ZipCode:"+zipcode;
System.out.println(fulldetails);
conn.disconnect();
}
catch(Exception exception)
{
exception.printStackTrace();;
}
这里我向一个接受ip作为参数的web服务发送一个get请求,并将country及其区域作为响应发送。
这样可以正常工作几天但后来它开始抛出#34;本地异常失败:java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?)"。 我搜索过谷歌,其中大部分指定断开http对象。我也做了但我得到了同样的错误。任何人都可以帮助我
答案 0 :(得分:0)
这很可能是服务器端问题。由于端口号限制,Windows Server 2003上非常流行的一个。您的服务器端详细信息是什么?
参考其他答案,no buffer space available
答案 1 :(得分:0)
查看您的代码,可能的解释是您的断开连接的代码有问题。您在rd.close()
区块内呼叫conn.disconnect()
和try { ... }
。如果抛出异常,catch
将处理它......但是块结束时的conn.disconnect()
调用不会发生。取决于连接是否是"持久性"或不,这可能导致连接泄漏。
对此进行编码的正确方法是确保清理代码位于finally
块中。