"Java.net.BindException: Adresse wird bereits verwendet", wenn versucht wird, schnelle Socket-Erstellung und -Zerstörung für Auslastungstests durchzuführen

Ich versuche zu laden testen, eine Java-server-durch das öffnen einer großen Anzahl von socket-verbindungen zu dem server, der Authentifizierung und schließt die Verbindung, dann wiederholen. Meine app läuft Super für eine Weile, aber schließlich habe ich bekommen:

java.net.BindException: Address already in use: verbinden

Gemäß der Dokumentation habe ich gelesen, der Grund dafür ist, dass geschlossene sockets immer noch besetzen, die lokale Adresse zugewiesen, um Sie für einen Zeitraum von Zeit, nachdem die close() aufgerufen wurde. Das ist OS abhängig, sondern kann in der Größenordnung von Minuten. Ich habe versucht, den Aufruf setReuseAddress(true) auf den sockel mit der Hoffnung, dass seine Adresse wäre wiederverwendbare sofort nach close() genannt wurde. Leider scheint dies nicht der Fall sein.

Mein code für die socket-Erstellung ist:

Socket socket = new Socket();
socket.setReuseAddress(true);
socket.connect(new InetSocketAddress(m_host, m_port));

Aber ich bekomme immer noch diese Fehlermeldung:

java.net.BindException: Address already in use: verbinden Sie nach einer Weile.

Gibt es eine andere Möglichkeit das zu erreichen, was ich versuche zu tun? Ich möchte für die Instanz: offen 100 Steckdosen, schließen Sie alle offenen 200 Steckdosen, schließen Sie alle offenen 300, etc. bis zu einem Maximum von 2000 oder so Sockeln.

Jede Hilfe wäre sehr geschätzt werden!

InformationsquelleAutor der Frage bradforj287 | 2011-01-16

Schreibe einen Kommentar