在Linux中使用Java应用程序打开端口

3
我有一个Java应用程序,它在一个端口创建了一个SocketServer。 我在Windows机器上测试我的应用程序,并且可以正常运行,但是当我在Linux机器上测试时,该端口没有监听。
有没有办法在Linux机器上专门打开一个端口?
我运行了“netstat”命令,我在应用程序中使用的端口没有出现。 它没有抛出任何异常。 我正在尝试从另一台机器连接到应用程序,但连接被拒绝。
老实说,我不知道为什么它无法运行...
请帮忙解决。
谢谢, 大卫

1
两者之间没有区别。请展示你的代码,让我们看看你想做什么。 - tddmonkey
唯一的区别是在Windows机器上我运行一个“.jar”文件,在Linux机器上我运行一个“.sar”文件,但这并不影响操作系统类型,而影响jboss。 - David
如果您无法在指定端口上进行侦听,则服务器套接字将抛出异常,您是否收到了该异常?或者,如果侦听正常,则netstat应显示您正在侦听的端口。 - Sam Liao
10个回答

3

你想打开的端口号是多少?

如果端口号小于1024,只有root用户才能打开或授权访问。


端口号是1234。 我是root用户。 - David

2

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


1

在Windows和Linux上不应该有任何区别。您能否发布一个异常堆栈跟踪,这很可能是您遇到的问题?

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


它不会抛出任何异常。 - David

0

它应该是一样的。在Linux上它是否抛出异常?也许目标端口已经被占用了。

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

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


问题不在我的代码上,因为它可以在 Windows 机器上运行。 防火墙不是问题,因为它没有安装。 - David

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

我使用 "netstat -na" 和 "netstat -na | grep 1234"。 - David

0

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

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

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


我尝试过了,但它抛出了一个“ClassNotFoundException: SocketServer”。 - David
你是在使用 Sun Java 还是 gcj?gcj 是 Java 的一个开源实现,我总是遇到麻烦。尝试安装 Sun Java jdk 和 jre。 - hacintosh
你是指java.net.ServerSocket对吧? - akarnokd

0

你尝试过从同一台机器连接吗,以排除防火墙问题?

你也可以使用telnet检查端口是否开放。

telnet localhost 1234

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


0

我怀疑JBoss SAR配置不正确,无法启动您的服务器。请尝试以下操作:

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

0

0

回复这篇旧帖,为新手提供帮助。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接