Imansible assegnare l’indirizzo richiesto: JVM_Bind

Quando sto provando a configurare un server socket, ho ricevuto un messaggio di errore:

Exception in thread "main" java.net.BindException: Cannot assign requested address: JVM_Bind at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383) at java.net.ServerSocket.bind(ServerSocket.java:328) at java.net.ServerSocket.(ServerSocket.java:194) at java.net.ServerSocket.(ServerSocket.java:106) at socketyserver.SocketyServer.main(SocketyServer.java:12) Java Result: 1 

L’intero codice è il più semplice in quanto può essere:

 public static void main(String[] args) throws UnknownHostException, IOException { ServerSocket serverSocket; serverSocket = new ServerSocket(9999); } 

Sono sicuro al 100% che le mie porte vengano inoltrate, Windows Firewall è spento. Niente blocca la porta 9999. Cos’altro può andare storto?

Come altre persone hanno sottolineato, è probabilmente correlato a un altro processo che utilizza la porta 9999 . Su Windows, esegui il comando:

 netstat -a -n | grep "LIST" 

E dovrebbe elencare tutto ciò che sta facendo il hog della porta. Ovviamente dovrai andare e uccidere manualmente quei programmi in Task Manager. Se ancora non funziona, sostituisci la linea:

 serverSocket = new ServerSocket(9999); 

Con:

 InetAddress locIP = InetAddress.getByName("192.168.1.20"); serverSocket = new ServerSocket(9999, 0, locIP); 

Ovviamente sostituisci 192.168.1.20 con il tuo attuale indirizzo IP, oppure usa 127.0.0.1 .

Potrebbe essere correlato a una errata configurazione nel /etc/hosts . Nel mio caso, era così: 192.168.1.11 localhost invece di 127.0.0.1 localhost

Solo per gli altri che potrebbero guardare questa risposta nella speranza di risolvere un problema simile, ho ricevuto un messaggio simile perché il mio indirizzo IP è cambiato.

 java.net.BindException: Cannot assign requested address: bind at sun.nio.ch.Net.bind(Native Method) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:126) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59) at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:182) at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:311) at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:260) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.server.Server.doStart(Server.java:273) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 

L’errore dice Cannot assign requested address . Ciò significa che è necessario utilizzare l’indirizzo corretto per una delle interfacce di rete o 0.0.0.0 per accettare connessioni da tutte le interfacce.

Le altre soluzioni sulle porte funzionano solo dopo una magia nera a volte non riuscita (come il funzionamento dopo alcuni riavvii del computer ma non altri) perché la porta è completamente irrilevante.

Documentazione Java per java.net.BindExcpetion ,

Segnala che si è verificato un errore durante il tentativo di associare un socket a un indirizzo e una porta locali. In genere, la porta è in uso o non è ansible assegnare l’indirizzo locale richiesto .

Causa:

L’errore è dovuto alla seconda condizione sopra menzionata. Quando si avvia un server (Tomcat, Jetty, ecc.), Ascolta una porta e associa un socket a un indirizzo e una porta. In Windows e Linux il nome host è risolto all’indirizzo IP da /etc/hosts Questo host al file di mapping dell’indirizzo IP può essere trovato in C:\Windows\System32\Drivers\etc\hosts . Se questa mapping viene modificata e il nome dell’host non può essere risolto sull’indirizzo IP, si ottiene il messaggio di errore.

Soluzione:

Modifica il file hosts e correggi il mapping per hostname e IP usando i privilegi di amministratore.

per esempio:

 #127.0.0.1 localhost 192.168.52.1 localhost 

Ulteriori informazioni: java.net.BindException: imansible assegnare l’indirizzo richiesto.

Per me è stato perché un precedente cambio jmeter.properties era ancora in gioco

 httpclient.localaddress=12.34.56.78 

se stai usando un server, ci sono “IP della rete pubblica” e “IP della rete interna”. Usa “IP di rete interno” nel tuo file / etc / hosts e “IP di rete pubblica” nel tuo codice. se usi “public network IP” nel tuo file / etc / hosts, otterrai questo errore.

La porta è presa da un altro processo. Forse una vecchia corsa non terminata del tuo programma. Assicurati che il tuo programma sia uscito in modo pulito o lo uccida.

Come afferma l’errore, non può vincolare, il che in genere significa che è in uso da un altro processo. Da una riga di comando eseguire:

netstat -a -n -o

Interrogare l’uscita per la porta 9999 in uso nella colonna di sinistra.

Per maggiori informazioni: http://www.zdnetasia.com/see-what-process-is-using-a-tcp-port-62047950.htm

Nel mio caso, cancella da / etc / hosts

  • 127.0.0.1 localhost
  • 192.168.100.20 localhost <<<< ---- (cancella o commenta)

Ho trovato questo errore durante la copia delle configurazioni da un server a un altro.

Ho avuto il nome host del vecchio host nella mia proprietà jetty.host $ {JETTY_BASE} /start.ini . L’impostazione corretta del valore della proprietà jetty.host ha risolto il problema.

Spero che questo aiuti qualcuno in futuro a dover lavorare su più server contemporaneamente.

se ti capita su CentOS?

Dovresti provare a questo.

$ riavviare la rete di servizio

o

riavvia il tuo server.

java.net.BindException: imansible assegnare l’indirizzo richiesto

Secondo la documentazione di BindException , fondamentalmente:

Segnala che si è verificato un errore durante il tentativo di associare un socket a un indirizzo e una porta locali. In genere, la porta è in uso o non è ansible assegnare l’indirizzo locale richiesto.

Quindi prova il seguente comando:

 sudo lsof -i:8983 

per ricontrollare se un’applicazione utilizza la stessa porta e ucciderla.

In caso contrario, assicurati che il tuo indirizzo IP a cui stai cercando di collegarsi sia corretto (è assegnato correttamente all’interfaccia di rete).