java.net.SocketException:权限被拒绝:连接。原因可能是什么?如何避免?

java.net.SocketException:权限被拒绝:连接。原因可能是什么?如何避免?,java,httpurlconnection,socketexception,Java,Httpurlconnection,Socketexception,在向服务器发送大量请求时,我遇到了java.net.SocketException(权限被拒绝:connect)。我已经尝试了其他线程中提到的-Djava.net.preferIPv4Stack=true选项。 只有在建立了大量连接之后,才会出现此问题。以下代码可用于重现问题: public class Example { public static void main(String[] args) { if(args.length == 1) { System.out.

在向服务器发送大量请求时,我遇到了
java.net.SocketException
(权限被拒绝:connect)。我已经尝试了其他线程中提到的
-Djava.net.preferIPv4Stack=true
选项。 只有在建立了大量连接之后,才会出现此问题。以下代码可用于重现问题:

public class Example {
  public static void main(String[] args) {
    if(args.length == 1) {
      System.out.println(args[0]);
      for(int i = 0; i < Integer.MAX_VALUE; i++) {
        requestURL(args[0]);
      }
    }
  }
  public static void requestURL(String targetUrl) {
    URL url = new URL(targetUrl);
    HttpURLConnection httpCon = (HttpURLConnection)url.openConnection();
    httpCon.setDoInput(true);
    BufferedReader rd = new BufferedReader(new InputStreamReader(httpCon.getInputStream()));
    //handle response here
    rd.close();
    httpCon.disconnect();
  }
}
当问题发生时,不会向服务器发送进一步的请求(服务器上没有日志条目,也没有SYN数据包(使用tcpdump嗅探))

编辑#3

我忘了用
-Djava.net.preferIPv4Stack=true
参数运行应用程序。
当同时使用上述参数和
httpCon.disconnect()
方法时,它还没有引发异常。

尝试使用httpCon.disconnect(),以确保在完成读取响应后重新启动套接字。

您应该发布堆栈跟踪。确切的异常是什么?它是来自您的代码还是您连接到的服务器(例如,速率限制)?
java.net.SocketException: Permission denied: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
    at sun.net.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.protocol.http.HttpURLConnection.connect(Unknown Source)
    at Example.requestUrl(Example.java)
    at Example.main(Example.java)