2016-04-25 6 views
0

Ich renne in eine java.net.SocketException (Berechtigung verweigert: connect) beim Senden einer Menge von Anfragen an einen Server. Ich habe die -Djava.net.preferIPv4Stack=true Option wie in anderen Themen erwähnt versucht. Dieses Problem tritt nur auf, nachdem bereits viele Verbindungen hergestellt wurden. Der folgende Code kann verwendet werden, um das Problem zu reproduzieren:java.net.SocketException: Berechtigung verweigert: connect. Was könnte die Ursache sein und wie kann man es vermeiden?

Der Code wird erfolgreich die Anforderungen senden, bis die Ausnahme auftritt. Dies wurde in den Protokolldateien des Servers verifiziert.

Bitte führen Sie den Beispielcode nur für einen Server, den Sie zulassen, da es eine Menge Verkehr/Belastung auf dem Server generiert.

Die Frage ist nun: Wie kann man diese Ausnahme vermeiden? Oder irgendwelche Workarounds? Und was ist das eigentlich Problem hier?

EDIT

hinzugefügt httpCon.disconnect(). (Löst nicht das Problem)

EDIT # 2 (Stacktrace)

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) 

Wenn das Problem auftritt keine weiteren Anfragen an den Server gesendet werden (keine Protokolleinträge auf dem Server und keine SYN-Pakete (schnüffelte mit tcpdump)).

EDIT # 3

ich vergessen habe, die Anwendung mit dem -Djava.net.preferIPv4Stack=true Argumente laufen. Es hat noch keine Ausnahme ausgelöst, wenn Sie beide das oben genannte Argument und die httpCon.disconnect() Methode verwenden.

+0

Sie sollten einen Stack-Trace veröffentlichen. – javabrett

+0

Was ist die genaue Ausnahme? Ist es von Ihrem Code oder dem Server, mit dem Sie sich verbinden (z. B. ratenbegrenzend)? –

Antwort

1

Versuchen Sie, httpCon.disconnect() zu verwenden, um sicherzustellen, dass der Socket erneut freigegeben wird, nachdem Sie die Antwort gelesen haben.

Verwandte Themen