【问题标题】:Open port in linux with java application [closed]使用java应用程序在linux中打开端口[关闭]
【发布时间】:2009-06-24 10:52:06
【问题描述】:

我有一个在端口中创建套接字服务器的 java 应用程序。 我在 windows 机器上测试我的应用程序,并且运行正常,但是当我在 linux 机器上测试它时,端口没有监听。

有没有办法专门在linux机器上打开一个端口?

我运行“netstat”命令,但我在应用程序中使用的端口没有出现。 它不会抛出任何异常。 我正在尝试从另一台机器连接到应用程序,但连接被拒绝。

真诚的,我不知道为什么它不运行......

请帮忙。

谢谢, 大卫

【问题讨论】:

  • 两者没有区别。向我们展示您的代码,看看您要做什么
  • 唯一的区别是在windows机器上我运行一个“.jar”而在linux机器上我运行一个“.sar”,但它不影响操作系统的类型,但是在 jboss 中。
  • 如果你不能监听指定端口,服务器套接字会抛出异常,你有这个异常吗?或者,如果你听得很好,netstat 应该会显示你正在监听的端口。

标签: java linux port


【解决方案1】:

您要打开的端口号是多少?

如果低于 1024,则只有 root 用户可以打开或授予访问权限。

【讨论】:

  • 端口号是1234,我是root用户
【解决方案2】:

您确定您的代码实际上正在执行吗?您对 .sar 文件中的代码的评论意味着您没有直接执行它,而是将其部署到 jboss。也许它没有正确部署?您是否尝试过在创建 ServerSocket 前后放置一些日志记录语句(甚至是 System.out.println 语句)?

【讨论】:

    【解决方案3】:

    在 Windows 和 Linux 上应该没有区别。你能发布一个你最有可能得到的异常堆栈跟踪吗?

    可能的情况是,您选择的端口已被占用(在 Linux 上通常某些服务正在运行),或者您尝试绑定低于 1024 的端口,这仅允许 root 使用。

    【讨论】:

    • 它不会抛出任何异常
    【解决方案4】:

    使用 netstat -napt 来检查(不知道你用了哪些参数)。

    【讨论】:

    • 我使用“netstat -na”和“netstat -na | grep 1234”
    【解决方案5】:

    就像 Johan Buret 所说,如果您尝试打开低于 1024 的端口,则必须以 root 或 sudo 身份运行程序。

    如果您正在运行像 ubuntu 这样的发行版,但您不是 root 并且未启用 root,请执行以下操作: sudo java SocketServer

    如果您是普通用户并且可以 su 到基于 fedora/redhat 的发行版的 root,请运行以下命令: 苏—— (提示输入root密码) java SocketServer

    【讨论】:

    • 我试过了,但它抛出了“ClassNotFoundException: SocketServer”
    • 您使用的是 Sun Java 还是 gcj? gcj 是我一直遇到的问题的 java 的开源实现。尝试安装 Sun java jdk 和 jre。
    • 你的意思是 java.net.ServerSocket 对吧?
    【解决方案6】:

    您是否尝试过从同一台机器连接以排除防火墙问题?

    你也可以使用telnet来检查端口是否打开

    telnet localhost 1234
    

    (如果端口未打开,将拒绝连接)

    【讨论】:

      【解决方案7】:

      它应该工作相同。它会在linux上引发异常吗?可能目标端口已经被占用了。

      编辑:也许您的代码已成功绑定到端口,但 Linux 防火墙阻止了传入连接?

      编辑 2:也许您的 Linux JBoss 配置不同,并且您的包含 ServerSocket 初始化的代码不会自动执行。

      【讨论】:

      • 问题不在我的代码中,因为它可以在 Windows 机器上运行。防火墙不是问题,因为它没有。
      【解决方案8】:

      我怀疑 JBoss SAR 没有正确配置来启动您的服务器。请尝试以下操作:

      • 从 Linux 命令行运行 JAR 文件(就像在 Windows 上成功一样)
      • 将 SAR 文件安装到 Windows JBoss 安装中,看看是否遇到与 Linux 相同的问题

      【讨论】:

        【解决方案9】:

        【讨论】:

          【解决方案10】:

          回复这个旧帖子;为了新人的利益。

          我的一位团队成员也遇到了类似的问题。不确定您的具体问题可能是什么;对我们来说,问题很小而且很愚蠢。 Unix 的路径分隔符是冒号“:”,而 Windows 的路径分隔符是分号“;”。从 java 应用程序调用套接字服务器 java 进程时,请确保使用java.io.File.pathSeparator,以便 RunTime 代码在 Windows 和 Unix 环境下都可以工作。

          【讨论】:

            猜你喜欢
            • 2013-07-24
            • 2013-10-02
            • 1970-01-01
            • 2015-10-30
            • 2011-05-19
            • 1970-01-01
            • 2013-03-10
            • 1970-01-01
            • 2015-06-28
            相关资源
            最近更新 更多