3

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

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

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

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

请帮忙。

谢谢,大卫

4

10 回答 10

3

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

如果它低于 1024,那么只有 root 用户可以打开它或授予对它的访问权限。

于 2009-06-24T10:56:23.363 回答
2

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

于 2009-06-24T12:18:42.447 回答
1

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

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

于 2009-06-24T10:59:43.510 回答
0

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

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

于 2011-12-27T22:27:09.053 回答
0

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

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

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

于 2009-06-24T10:54:28.513 回答
0

使用 netstat -napt 进行检查(我不知道您使用了哪些参数)。

于 2009-06-24T11:10:03.210 回答
0

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

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

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

于 2009-06-24T11:15:03.463 回答
0

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

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

telnet localhost 1234

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

于 2009-06-24T11:27:14.500 回答
0

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

  • 从 Linux 命令行运行 JAR 文件(就像在 Windows 上成功一样)
  • 将 SAR 文件安装到 Windows JBoss 安装中,看看是否遇到与 Linux 相同的问题
于 2009-06-24T12:42:42.337 回答
0

是否启用了 SELinux ?尝试禁用它:http ://www.crypt.gen.nz/selinux/disable_selinux.html

于 2009-06-24T12:43:10.790 回答