[VB.NET] IPv4 アドレス or host 名の文字列から、IPAddress インスタンスを取得する

2014年4月17日

 TcpClient などで通信する際、相手先の IP アドレス(Net.IPAddress のインスタンス)を得る必要があります。
 ところが、Net.IPAddress を直接 new しようとすると、コンストラクタ引数が使い物にならないものばかりです(汗

 New Net.IPAddress を使用する場合、IP アドレスを指定する時は以下のように書けばよいです。

New Net.IPAddress({192, 168, 0, 1})

 しかしhost 名を指定することはできませんし、IP アドレスを指定する時も 4 つの数値ではなく、ping コマンドとかで指定するような感じで "192.168.0.1" と指定したかったりします。

 この要求に最も近いのが、Net.Dns.GetHostAddresses を使って解決する方法です。host 名指定でも IP アドレス文字列による 指定でも parse してくれます。

 しかし、結果が配列で戻ってきます。しかもプロトコル混在で…(汗
 仕組的にアドレスが複数戻ってくるのは当然とはいえ、通信相手のアドレスは一つあればいいです。なので、IP アドレスを一つだけ返すラッパー関数を作ってみました。以下は IPv4 のアドレスのうち、最初に回答のあったものを一つ戻す例です。

Public Shared Function GetIPv4FirstAddress(address As String) As Net.IPAddress

    Dim entries = Net.Dns.GetHostAddresses(address)

    For Each ip In entries
        If ip.AddressFamily = Net.Sockets.AddressFamily.InterNetwork Then
            Return ip
        End If
    Next

    Return Nothing
End Function





カテゴリー: Program, VB.NET

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org