> java -version
java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.3) (suse-3.16.1-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
在 openSUSE 12.2 (x86_64) 上,AppArmor没有运行,防火墙被禁用。
如果使用 AsynchronousServerSocketChannel 的服务器正在侦听连接并且我指定 localhost 或 127.0.0.1,那么它只接受来自 localhost 的连接,如果我尝试从另一台机器连接它,它会拒绝它。怎么回事?!如果我将其实际机器的主机名或 IP 地址而不是 localhost 或 127.0.0.1 放入 Java 服务器,那么它确实接受来自其他地方的连接。双WTF?!
当我使用老式同步服务器时没有这样的问题——当我将它绑定到本地主机端口时,它接受来自本地机器和外部机器的连接。此外,当我都设置为绑定到 localhost 时,我注意到同步和 NIO2 之间的以下差异:
> netstat -ltupn | grep
tcp 0 0 :::2340 :::* LISTEN 6749/java
tcp 0 0 127.0.0.1:12401 :::* LISTEN 6767/java
这对我来说是一个大问题,因为我计划将此服务器部署到多台机器上,并且必须更改每台机器上的配置文件以添加实际的主机名/IP 而不是拥有 localhost,这将是一个很大的痛苦。如果我指定 localhost 应该有什么解决方法,它会起作用吗?