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