2

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

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

Could not listen on port: 4444.

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

[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 错误?

4

3 回答 3

2

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

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

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

谢谢,问候本尼迪克特

于 2012-08-26T20:35:31.030 回答
0

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

于 2012-08-26T16:36:17.780 回答
0

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

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

于 2012-08-26T16:37:06.133 回答