> 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 からの接続のみが受け入れられ、別のマシンから接続しようとすると拒否されます。なんてこと?!ローカルホストや 127.0.0.1 ではなく、実際のマシンのホスト名または IP アドレスを Java サーバーに入力すると、別の場所からの接続が受け入れられます。ダブルWTF?!
古い学校の同期サーバーを使用する場合、そのような問題はありません.localhostポートにバインドすると、ローカルマシンと外部マシンの両方からの接続を受け入れます. さらに、両方とも 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を指定した場合に機能するように修正するにはどうすればよいですか?