TcpClient で IPv6 を利用したいときのために
ごくごく簡単なサンプルを作ってみました
IPv6とIPv4は基本的なコードはすべて同じです
今回は接続先のコードをハードコーディングしていますが
普通はテキストボックスから入力しもらったり DNS で名前解決するなどして
IPアドレスを取得してもらうようになるかと思います
ちょっと気をつけたいのは TcpClient のコンストラクタにAddressFamily を指定しなければならないことです
引数に AddressFamily 定数を使うのではなく今回のように IPAddress インスタンスから
実際の接続先アドレスの AddressFamily を取得するようにします
IPv6 |
IPv4 |
IPAddress TargetAddress = IPAddress.Parse("2001:200:0:8002:203:47ff:fea5:3085");
using(TcpClient Client = new TcpClient(TargetAddress.AddressFamily)) { Client.Connect(TargetAddress, 80);
NetworkStream st = Client.GetStream(); StreamWriter sw = new StreamWriter(st, Encoding.ASCII); StreamReader sr = new StreamReader(st, Encoding.ASCII);
if (st.CanRead && st.CanWrite ) { sw.WriteLine("GET / HTTP/1.0"); sw.WriteLine(); sw.Flush();
Console.WriteLine(sr.ReadToEnd()); }
Client.Close(); } |
IPAddress TargetAddress = IPAddress.Parse("203.178.141.194");
using(TcpClient Client = new TcpClient(TargetAddress.AddressFamily)) { Client.Connect(TargetAddress, 80);
NetworkStream st = Client.GetStream(); StreamWriter sw = new StreamWriter(st, Encoding.ASCII); StreamReader sr = new StreamReader(st, Encoding.ASCII);
if (st.CanRead && st.CanWrite ) { sw.WriteLine("GET / HTTP/1.0"); sw.WriteLine(); sw.Flush();
Console.WriteLine(sr.ReadToEnd()); }
Client.Close(); } |
参考:
IPv6 ってどうですか?
http://cham-reo.com/blog/archive/2004/01/05/686.aspx