本地异常失败:java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?):

时间:2015-06-30 10:55:58

标签: java sockets http get

我写了一个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对象。我也做了但我得到了同样的错误。任何人都可以帮助我

2 个答案:

答案 0 :(得分:0)

这很可能是服务器端问题。由于端口号限制,Windows Server 2003上非常流行的一个。您的服务器端详细信息是什么?

参考其他答案,no buffer space available

答案 1 :(得分:0)

查看您的代码,可能的解释是您的断开连接的代码有问题。您在rd.close()区块内呼叫conn.disconnect()try { ... }。如果抛出异常,catch将处理它......但是块结束时的conn.disconnect()调用不会发生。取决于连接是否是"持久性"或不,这可能导致连接泄漏。

对此进行编码的正确方法是确保清理代码位于finally块中。