繁体   English   中英

java.net.BindException:权限被拒绝为root

[英]java.net.BindException: Permission denied as root

我在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。为什么我仍然出现“权限被拒绝”错误?

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

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

我将继续提供动手支持,也许他们可以提供帮助。

谢谢,问候本尼迪克特

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

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

转到任务管理器,然后单击“进程”选项卡,检查是否正在运行任何javaw.exe。 结束程序,然后运行程序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM