socket multiple mkyong library example clients java eclipse networking serversocket

multiple - ¿Cómo resuelvo el error "java.net.BindException: Address already in use: JVM_Bind"?



java sockets (15)

En Eclipse, obtuve este error:

run: [java] Error creating the server socket. [java] Oct 04, 2012 5:31:38 PM cascadas.ace.AceFactory bootstrap [java] SEVERE: Failed to create world : java.net.BindException: Address already in use: JVM_Bind [java] Java Result: -1 BUILD SUCCESSFUL Total time: 10 seconds

No estoy seguro de por qué surgió ahora, pero funcionó bien hace solo unas horas. ¿Debo reiniciar mi máquina? ¿Cómo llego al fondo? Agradezco cualquier consejo o consejo.


(1) comprueba que el puerto esté en uso o no, elimina ese proceso

$ lsof -i: [puerto]

(2) otra razón es que el puerto es utilizado por ipv6, solución:

editar /etc/sysctl.conf

agregar esto al archivo

net.ipv6.conf.all.disable_ipv6 = 1

luego haz que tenga efecto

$ sudo sysctl -p /etc/sysctl.conf

o simplemente reiniciar


El puerto ya está siendo utilizado por algún otro proceso ya que @Diego Pino dijo que puedes usar lsof en Unix para localizar el proceso y matar al respectivo, si estás en Windows usa netstat -ano para obtener todos los elementos del proceso y el puertos que todos adquieren. busca tu puerto deseado y mata.

para ser muy fácil solo reinicie su máquina, si eso es posible :)


En Ubuntu / Unix podemos resolver este problema haciendo 2 pasos como se describe a continuación.

1. Use netstat -plten |grep java

Dará resultados como este

tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1001 76084 9488/java

Aquí el puerto no es 8080 en el que se está ejecutando el proceso de java. Y su id de proceso ( pid ) es 9488 en frente de java ( 9488/java ).

2. Now to resolve the Address already in use problem you have to kill this process using this command.

kill -9 9488

Aquí: -9 para la parada forzada y 9488 es la identificación del proceso.

Ahora ejecute nuevamente el servidor. Espero que esta respuesta sea útil para ustedes.


En Mac:

Terminal de proceso de kill <pid> : kill <pid>

Encontrar pid: Terminal: lsof -i:<port>

De Diego Pino respuesta


En la línea CMD de Windows, descubra la identificación del proceso que mantiene una conexión en el puerto de enlace ingresando el siguiente comando:

C:> netstat -a -o

-a muestra todas las conexiones

-o Mostrar identificador de proceso

Y luego finaliza el proceso.


En ventanas

netstat -ano

Enumerará todos los protocolos, puertos y procesos de escucha. Utilizar

taskkill -pid "proces to kill" /f

para matar el proceso de escuchar el puerto. p.ej

taskkill -pid 431 /f


Me enfrenté a un problema similar en Eclipse cuando se abrieron dos consolas cuando comencé el programa Servidor primero y luego el programa Cliente. Solía ​​detener el programa en la consola única pensando que había cerrado el servidor, pero solo había cerrado el cliente y no el servidor. Encontré ejecutar procesos Java en mi administrador de tareas. Este problema se resolvió cerrando los programas de Servidor y Cliente desde sus consolas individuales (Eclipse muestra la consola del último programa activo). Entonces, cuando comencé el programa Servidor nuevamente, el puerto estaba nuevamente abierto para ser capturado.


Para aquellos que buscan la respuesta más simple (ya que es lo que generalmente extrañamos), detén tu proyecto en ejecución y vuelve a iniciarlo. La mayoría de las veces lo que hacemos es olvidarnos de detener el proyecto que ejecutamos antes y cuando volvemos a ejecutar el proyecto muestra un problema de este tipo.

También adjunto una foto para que quede más clara (utilizo ''Spring tool suite''). Entonces, lo que tiene que hacer es hacer clic en el botón de la extrema derecha, si quiere reiniciar el mismo proyecto o primero haga clic en el botón que es el segundo de la derecha para detener su proyecto y luego el botón de la izquierda para ejecutar tu proyecto. Espero que esto solucione el problema de algunos de los programadores más nuevos. :)


Reinicie la PC una vez, creo que funcionará. Comenzó a funcionar en mi caso.


Sí, como lo dijo Guido Simone porque otro proceso es escuchar el mismo puerto. Si estás en Ubuntu, puedes simplemente matar ese proceso dando el comando sudo kill $(sudo lsof -t -i:[port number])

ex: sudo kill $(sudo lsof -t -i:8080)

Pero una vez no funcionó para mí. di el comando

$ lsof -i:[port]

y no muestra nada

Revisé los contenedores de mi docker usando el comando docker ps -a pero ninguno de ellos vivo. Todos los contenedores se han detenido (pero recuerdo, detuve un contenedor que se usó en el mismo puerto hace unos minutos). Asegurarme de que Docker no sea el motivo , Detengo el proceso de docker completo usando el comando sudo service docker stop y vuelvo a intentarlo. Sorprendentemente eclipse no mostró el error en ese momento. Ejecuta mi programa perfectamente.

Espero que mi experiencia ayude a alguien.


Sí, tiene otro proceso vinculado al mismo puerto.

TCPView (solo Windows) de Windows Sysinternals es mi aplicación favorita siempre que tengo un error JVM_BIND. Muestra qué procesos están escuchando en qué puerto. También proporciona un menú contextual conveniente para matar el proceso o cerrar la conexión que se interpone en el camino.


Si sabe en qué puerto se está ejecutando el proceso, puede escribir: lsof -i:<port> .

Por ejemplo, lsof -i:8080 , para listar el proceso (pid) que se ejecuta en el puerto 8080.

Luego mata el proceso con kill <pid>


Significa que algún otro proceso ya está usando el puerto. En caso de que otras aplicaciones críticas utilicen este puerto y no desee cerrar esa aplicación, la mejor manera es elegir cualquier otro puerto que sea de uso gratuito.

Configure su aplicación para usar cualquier otro puerto que sea gratuito y verá que su aplicación está funcionando.


Su puerto debe estar ocupado en algún otro proceso. Para que pueda descargar TCPView en https://technet.microsoft.com/en-us/sysinternals/bb897437 y matar el proceso para el puerto usado.

Si no conoce su puerto, haga doble clic en el servidor que no se inicia y haga clic en Abrir página de propiedades del servidor y haga clic en GlassFish desde la columna de la izquierda. Aquí encontrarás los puertos.


Tienes otro proceso ejecutándose en el mismo puerto.

Puedes intentar eliminar uno de los servicios de java.exe que se ejecutan en tu administrador de tareas. Asegúrate de no matar el eclipse, ya que también está listado como java.exe. Si nada funciona, reiniciar su máquina lo arreglará de todos modos. Parece que no estás cerrando un socket de una prueba anterior. Espero que esto ayude.