IPv6 on Java
河野真治 @ 琉球大学情報工学です。
Java のServerなんですが、
なんか、IPv6 では接続できないし。なんでだろう? Any でbindす
るのだと、tcp4 にしかbindしないっぽい。変だなぁ。
ssc.socket().bind(new InetSocketAddress(receive_port));
で良いはず。なんですが、dual stack/single stackでも状況が異なる
らしい。netstat で見る限り、tcp4 になってしまう。
v6なワイルドカードアドレスを明示的に取る手法が良くわからない。 と思っていたら、
http://tinyurl.com/57jehf
には、"::" を使えみたいなことが書いてあるな。
ssc.socket().bind(new InetSocketAddress("::",receive_port));
とするみたいですね。なるほど〜
tcp46 0 0 *.8766 *.* LISTEN
と、めでたく接続。telnet ::1 8766 で問題なく接続。めでたしめでたし。
と思っていたら、
http://d.hatena.ne.jp/torutk/20080127/p1
■[Java]NIOパッケージのServerSocketChannelはWindows上ではIPv6をlistenしない
Windows OSでNIOパッケージを使ってTCPサーバを記述したときにIPv6が使えないという問題にあたりました。BugIDにも登録されてますが、解決のめどはないようです。
Bug ID: 6230761 (so) NIO channels with IPv6 on Windows
なので、Windows Vista では、この方法ではダメらしいです。ふ〜ん。
なので、なんかの回避コードが必要っぽい。
java7 では、直るみたいな話もbugID の方には出ているみたいです。
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735