No se puede asignar la dirección solicitada: JVM_Bind

Cuando bash configurar un servidor de socket, aparece un mensaje de error:

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 

Todo el código es más simple, ya que puede ser:

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

Estoy 100% seguro de que mis puertos están reenviados, Windows Firewall está desactivado. Nada bloquea el puerto 9999. ¿Qué más puede salir mal?

Como han señalado otras personas, lo más probable es que esté relacionado con otro proceso que utiliza el puerto 9999 . En Windows, ejecute el comando:

 netstat -a -n | grep "LIST" 

Y debería enumerar todo lo que está acaparando el puerto. Por supuesto, tendrá que ir y eliminar manualmente esos progtwigs en el Administrador de tareas. Si esto aún no funciona, reemplace la línea:

 serverSocket = new ServerSocket(9999); 

Con:

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

Por supuesto, reemplace 192.168.1.20 con su dirección IP real, o use 127.0.0.1 .

Puede estar relacionado con una configuración incorrecta en su /etc/hosts . En mi caso, fue así: 192.168.1.11 localhost lugar de 127.0.0.1 localhost

Solo para otros que puedan ver esta respuesta con la esperanza de resolver un problema similar, recibí un mensaje similar porque mi dirección IP cambió.

 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) 

El error dice Cannot assign requested address . Esto significa que debe usar la dirección correcta para una de sus interfaces de red o 0.0.0.0 para aceptar conexiones de todas las interfaces.

Las otras soluciones sobre puertos solo funcionan después de la magia negra a veces fallida (como trabajar después de reiniciar una computadora pero no de otras) porque el puerto es completamente irrelevante.

Documentación de Java para java.net.BindExcpetion ,

Señala que se produjo un error al intentar vincular un socket a una dirección y puerto locales. Normalmente, el puerto está en uso o no se pudo asignar la dirección local solicitada .

Porque:

El error se debe a la segunda condición mencionada anteriormente. Cuando inicia un servidor (Tomcat, Jetty, etc.) escucha un puerto y vincula un socket a una dirección y puerto. En Windows y Linux, el nombre de host se resuelve en la dirección IP de /etc/hosts Este host para el archivo de asignación de direcciones IP se puede encontrar en C:\Windows\System32\Drivers\etc\hosts . Si se cambia esta asignación y el nombre de host no se puede resolver en la dirección IP, aparece el mensaje de error.

Solución:

Edite el archivo de hosts y corrija la asignación de nombre de host e IP utilizando los privilegios de administrador.

p.ej:

 #127.0.0.1 localhost 192.168.52.1 localhost 

Leer más: java.net.BindException: no puede asignar la dirección solicitada.

Para mí fue porque un cambio previo en jmeter.properties todavía estaba en juego

 httpclient.localaddress=12.34.56.78 

si está utilizando el servidor, hay “IP de red pública” e “IP de red interna”. Utilice la “IP de red interna” en su archivo / etc / hosts y “IP de red pública” en su código. si usa “IP de red pública” en su archivo / etc / hosts entonces obtendrá este error.

El puerto es tomado por otro proceso. Posiblemente una ejecución anterior sin terminar de su progtwig. Asegúrate de que tu progtwig haya salido limpiamente o mátalo.

Como indica el error, no se puede vincular, lo que generalmente significa que está siendo utilizado por otro proceso. Desde una línea de comando ejecuta:

netstat -a -n -o

Interrogue la salida para el puerto 9999 en uso en la columna de la izquierda.

Para más información: http://www.zdnetasia.com/see-what-process-is-using-a-tcp-port-62047950.htm

En mi caso, eliminar de / etc / hosts

  • 127.0.0.1 localhost
  • 192.168.100.20 localhost <<<< ---- (eliminar o comentar)

Encontré este error al copiar configuraciones de un servidor a otro.

Tenía el nombre de host del host anterior en mi propiedad $ {JETTY_BASE} /start.ini jetty.host . Configurar el valor correcto de propiedad de jetty.host resolvió el problema para mí.

Espero que esto ayude a alguien en el futuro que tenga que trabajar en múltiples servidores a la vez.

si sucedió en CentOS?

Deberías intentar esto.

reinicio de la red $ service

o

reinicia tu servidor.

java.net.BindException: no se puede asignar la dirección solicitada

Según la documentación de BindException , básicamente:

Señala que se produjo un error al intentar vincular un socket a una dirección y puerto locales. Normalmente, el puerto está en uso o no se pudo asignar la dirección local solicitada.

Intente el siguiente comando:

 sudo lsof -i:8983 

para verificar si alguna aplicación está utilizando el mismo puerto y matarlo.

Si ese no es el caso, asegúrese de que su dirección IP a la que intenta vincular sea correcta (está asignada correctamente a su interfaz de red).