InetSocketAddressについて、bindについてのメモ
2008/07/03
java
ソケット
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
参考
: