Java のServerなんですが、
なんか、IPv6 では接続できないし。なんでだろう? Any でbindす
るのだと、tcp4 にしかbindしないっぽい。変だなぁ。
ssc.socket().bind(new InetSocketAddress(receive_port));
で良いはず。なんですが、dual stack/single stackでも状況が異なる
らしい。netstat で見る限り、tcp4 になってしまう。
v6なワイルドカードアドレスを明示的に取る手法が良くわからない。 と思っていたら、
には、"::" を使えみたいなことが書いてあるな。
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
河野真治 @ 琉球大学工学部情報工学科