【问题标题】:java.net.BindException: Permission denied as rootjava.net.BindException:权限被拒绝为 root
【发布时间】:2012-08-26 16:11:05
【问题描述】:

我在http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html 关注 Oracle 的服务器端套接字教程。我使用他们提供的来源:

但是,当我尝试运行 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 错误?

【问题讨论】:

  • 端口 4444 已被使用?
  • 端口 4444 不是受保护的端口,因此您不需要 需要 root 访问权限。我认为该端口已在使用中。
  • 命令netstat -a | grep 4444返回什么?
  • 这是两个单独使用的命令:(1) netstat -a 将为您提供所有端口和服务 (2) grep 用于搜索从上述命令返回的所有内容字符串,其中包含文本 " 4444" 这意味着您可以获得使用 4444 的那些。
  • 不,端口未使用。 netstat -a | grep 4444 不返回任何内容。

标签: java exception port


【解决方案1】:

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

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

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

谢谢,问候 本尼迪克特

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我在 Mac OS X 10.7.4 上运行它。我不知道这里有 SELinux。
    【解决方案3】:

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

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

    【讨论】:

    • 不,端口未使用。 netstat -a | grep 4444 不返回任何内容。
    • 如果端口正在使用中,您将收到不同的异常消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2016-07-31
    • 2020-05-12
    • 2021-10-22
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多