java.net.BindException: Permiso denegado como root
Frecuentes
Visto 12,920 veces
2
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:
- http://docs.oracle.com/javase/tutorial/networking/sockets/examples/KnockKnockServer.java
- http://docs.oracle.com/javase/tutorial/networking/sockets/examples/KnockKnockProtocol.java
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?
3 Respuestas
2
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
0
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
0
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 java exception port or haz tu propia pregunta.
¿Ya se está utilizando el puerto 4444? - Cole Tobin
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. - Makoto
Que dice el comando
netstat -a | grep 4444
devoluciones ? - Y__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. - Naidu Ypvs
No, el puerto no está en uso.
netstat -a | grep 4444
no devuelve nada. - Benedikt Köppel