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