我有一个在端口中创建套接字服务器的 java 应用程序。我在 windows 机器上测试我的应用程序,并且运行正常,但是当我在 linux 机器上测试它时,端口没有监听。
有没有办法专门在linux机器上打开一个端口?
我运行“netstat”命令,我在应用程序中使用的端口没有出现。它不会抛出任何异常。我正在尝试从另一台机器连接到应用程序,但连接被拒绝。
真诚的,我不知道为什么它不运行......
请帮忙。
谢谢,大卫
您要打开的端口号是多少?
如果它低于 1024,那么只有 root 用户可以打开它或授予对它的访问权限。
您确定您的代码实际上正在执行吗?您对.sar
文件中代码的评论意味着您没有直接执行它,而是将其部署到 jboss。也许它没有正确部署?System.out.println
您是否尝试过在创建 ServerSocket 之前和之后放置一些日志记录语句(甚至语句)?
在 Windows 和 Linux 上应该没有区别。你能发布一个你最有可能得到的异常堆栈跟踪吗?
可能的情况是,您选择的端口已被占用(在 Linux 上通常某些服务正在运行),或者您尝试绑定低于 1024 的端口,这仅允许 root 使用。
回复这个旧帖子;为了新人的利益。
我的一位团队成员也面临着类似的问题。不确定您的具体问题可能是什么;对我们来说,问题很小而且很愚蠢。Unix 的路径分隔符是冒号“:”,而 Windows 的路径分隔符是分号“;”。从 java 应用程序调用套接字服务器 java 进程时,请确保使用java.io.File.pathSeparator以便 RunTime 代码在 Windows 和 Unix 环境下都可以工作。
它应该工作相同。它会在linux上引发异常吗?可能目标端口已经被占用。
编辑:也许您的代码成功绑定到端口,但 Linux 防火墙阻止了传入连接?
编辑 2:也许您的 Linux JBoss 配置不同,并且包含 ServerSocket 初始化的代码不会自动执行。
使用 netstat -napt 进行检查(我不知道您使用了哪些参数)。
就像 Johan Buret 所说,如果您尝试打开低于 1024 的端口,则必须以 root 或 sudo 身份运行程序。
如果您正在运行像 ubuntu 这样的发行版,而您不是 root 并且未启用 root,请执行以下操作:sudo java SocketServer
如果您是普通用户并且可以 su 到基于 Fedora/redhat 的发行版,请运行以下命令:su - (提示输入 root 的密码) java SocketServer
您是否尝试过从同一台机器连接以排除防火墙问题?
您也可以使用 telnet 来检查端口是否打开
telnet localhost 1234
(如果端口未打开,将拒绝连接)
我怀疑 JBoss SAR 没有正确配置来启动你的服务器。尝试以下操作: