java.net.BindException: Permiso denegado como root

Estoy siguiendo el tutorial ServerSide Socket de Oracle en http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html. Utilizo la fuente tal como la proporcionan:

Sin embargo, cuando trato de ejecutar KnockKnockServer, obtengo una IOException y luego el servidor imprime

Could not listen on port: 4444.

Agregué un e.printStackTrace() en el bloque catch IOException y obtenga:

[beni@mackerel:~]$ \sudo java KnockKnockServer
Creating socket
Could not listen on port: 4444.
java.net.BindException: Permission denied
    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.<init>(ServerSocket.java:194)
    at java.net.ServerSocket.<init>(ServerSocket.java:106)
    at KnockKnockServer.main(KnockKnockServer.java:41)

Tenga en cuenta que lo estoy ejecutando como root e intento abrir el puerto 4444. ¿Por qué sigo recibiendo un error de Permiso denegado?

preguntado el 26 de agosto de 12 a las 17:08

¿Ya se está utilizando el puerto 4444? -

El puerto 4444 no es un puerto protegido, por lo que no necesita acceso raíz. Estoy pensando que el puerto ya está en uso. -

Que dice el comando netstat -a | grep 4444 devoluciones ? -

Esos son dos comandos separados que se usan en uno: (1) netstat -a le dará todos los puertos y servicios (2) grep es para buscar todas las cadenas devueltas de los comandos anteriores con el texto "4444", lo que significa que puede obtener esos que están usando 4444. -

No, el puerto no está en uso. netstat -a | grep 4444 no devuelve nada. -

3 Respuestas

Logré solucionar el problema. ¡Tenía Manos Fuera! instalado en mi sistema, pero deshabilité todas las reglas de la barra de menú. El KnockKnockServer todavía no pudo abrir el puerto. ¡Ahora he desinstalado Hands Off! completamente, y puede abrir puertos como de costumbre.

Todavía es un poco sorprendente, porque siempre pude abrir el mismo puerto de socket con nc -l 4444 y con un programa en C, pero no de Java. Pero al mismo tiempo, Hands Off no me preguntó si quiero permitir que mi KnockKnockServer abra un puerto.

Seguiré con el soporte Hands Off, tal vez puedan ayudar.

Gracias, Saludos Benedikt

Respondido 26 ago 12, 21:08

La única explicación que se me ocurre es que SELinux niega el enlace.

Respondido 26 ago 12, 17:08

Ejecuto esto en Mac OS X 10.7.4. No estoy al tanto de que haya SELinux aquí. - Benedikt Köppel

El puerto 4444 es utilizado por otro programa.

vaya al administrador de tareas y la pestaña de proceso verifique si se está ejecutando javaw.exe. finalice el programa. Luego ejecute su programa

Respondido 26 ago 12, 17:08

No, el puerto no está en uso. netstat -a | grep 4444 no devuelve nada. - Benedikt Köppel

Si el puerto estuviera en uso, recibiría un mensaje de excepción diferente. - user207421

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.