InetSocketAddressについて、bindについてのメモ 2008/07/03

Javaです。

おおざっぱなメモです。
おおざっぱです。
ソケット通信する際の受けの部分で、

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
serverSocketChannel.socket().bind(inetSocketAddress);

という感じのコードでソケットにバインドさせています。
それで、inetSocketAddressの部分を、
new InetSocketAddress(port)でいくのか、new InetSocketAddress("127.0.0.1", port)でいくのか、はてまたnew InetSocketAddress(InetAddress.getLocalHost().getHostName(), port)
でいくのか。

ためしたのはWindowsでtenlnetで接続を確認
new InetSocketAddress(port)の場合、「telnet マシン名 port」、「telnet 127.0.01 port」で接続できました。

new InetSocketAddress(InetAddress.getLocalHost().getHostName(), port)の場合、「telnet マシン名 port」で接続できました。

結論、ふたつのアプリがソケットでローカル通信でする場合は、new InetSocketAddress(port)でバインドしたほうが無難かなと。

あと、バインドする際にnew InetSocketAddress("127.0.0.1", port)と、new InetSocketAddress(InetAddress.getLocalHost().getHostName(), port)でバインドさせると同時にバインドできますね。

使用しているポートでの二重起動チェックでは注意です。

windowsで使用している(リッスン)ポートを調べるにはコマンドnetstat -anで。
ポート49999をnew InetSocketAddress(InetAddress.getLocalHost().getHostName(), port)でバインドさせますと、
コマンドnetstat -anで、下記のようにみえます。
TCP 0.0.0.0:49999 0.0.0.0:0 LISTENING


ポート49999をnew InetSocketAddress("127.0.0.1", port)でバインドさせますと、
コマンドnetstat -anで、下記のようにみえます。

TCP 127.0.0.1:49999 0.0.0.0:0 LISTENING


参考

: