java.net.BindException:以root身份拒绝权限

时间:2012-08-26 16:11:05

标签: java exception port

我正在http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html关注Oracle的ServerSide Socket教程。我使用它提供的源:

然而,当我尝试运行KnockKnockServer时,我得到一个IOException然后服务器打印

Could not listen on port: 4444.

我在IOException catch块中添加了e.printStackTrace(),并得到:

[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)

注意,我是以root身份运行它并尝试打开端口4444.为什么我仍然会收到Permission denied错误?

3 个答案:

答案 0 :(得分:1)

我设法解决了这个问题。我举手了!安装在我的系统上,但禁用菜单栏中的所有规则。 KnockKnockServer仍然无法打开端口。现在我卸载了Hands Off!完全可以像往常一样打开端口。

它仍然有点令人惊讶,因为我始终能够使用nc -l 4444和C程序打开相同的套接字端口,但不能使用Java。但与此同时,Hands Off没有问我是否允许我的KnockKnockServer打开一个端口。

我将跟进Hands Off支持,也许他们可以提供帮助。

谢谢,问候 本尼迪克特

答案 1 :(得分:0)

我能想到的唯一解释是SELinux拒绝绑定。

答案 2 :(得分:0)

4444端口被另一个程序使用。

转到任务管理器并处理选项卡检查任何正在运行的javaw.exe。结束程序。然后运行你的程序