1

IPアドレスを照会するこの機能があります。

Dim strHostName As String
Dim strIPAddress As String 

Public Function ipconfig()
  strHostName = System.Net.Dns.GetHostName()
  strIPAddress = System.Net.Dns.GetHostEntry(strHostName).AddressList(0).ToString()

  rtb_Output.Text = rtb_Output.Text + "Computer Name: " & strHostName + Environment.NewLine + "IP Address: " &strIpAddress
End Function

Windows 7 デスクトップの有線接続ではまったく問題なく動作し、期待どおりに IPv4 アドレスを返します。Windows 8 タブレットで有線またはワイヤレスで実行すると、代わりに IPv6 アドレスが返されますが、IPv4 アドレスが必要です。なぜ、または代わりにIPv4アドレスを返すようにする方法はありますか?

4

4 に答える 4

0

LINQを使用して結果をフィルター処理できます。

Dim ipHostEntry = Dns.GetHostEntry(Dns.GetHostName)
Dim ipAddress = ipHostEntry.AddressList.FirstOrDefault(Function(ip) ip.AddressFamily = AddressFamily.InterNetwork)
If ipAdress IsNot Nothing Then
  ' Output ipAdress.ToString()
Else
  ' No IPv4 address could be retrieved
End If

説明: インターフェイスを実装する をIPHostAddress.AddressList返すため、LINQ 式で列挙できます。Array(Of IPAddress)IEnumerable

FirstOrDefaultの最初で唯一のパラメータとして送信された述語ラムダ関数に一致する AddressList 配列から最初の要素を返しますFirstOrDefault。ブール値を返すように述語関数を作成する必要があります。

配列は最初の要素から最後の要素まで反復され、要素ごとにラムダ関数が評価されます。そのパラメーターipは現在の反復項目です。ip.AddressFamily = AddressFamily.InterNetwork現在の項目が IPv4 アドレスであるかどうかを判断します。その場合、式が評価されtrue、項目が によって返されFirstOrDefaultます。と評価された場合false、配列の次の項目がチェックされます。述語に一致する要素がない場合FirstOrDefaultは、デフォルト値を返します。この場合Nothing(注意: 拡張First機能は同じように機能しますが、述語に一致する項目がない場合は例外をスローします。両方ともFirstFirstOrDefault引数なしで呼び出すことができ、それらは次の最初の要素を返します。シーケンス)。

私は上記の拡張メソッド ベースの表記法を好みますが、必要に応じて元のFrom In Where SelectLINQ 表記法を使用することもできます。

Dim ipAddress = (From ip In ipHostEntry.AddressList
                 Where ip.AddressFamily = AddressFamily.InterNetwork
                 Select ip)(0)

(0)この場合、は別の拡張メソッドの引数であることに注意してくださいElementAtOrDefault(index As Integer)

于 2014-02-15T13:48:56.913 に答える
0
 Public Function GetIPv4Address()
        GetIPv4Address = String.Empty
        Dim strmachine As String = System.Net.Dns.GetHostName()
        Dim iphe As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(strmachine)

        For Each ipheal As System.Net.IPAddress In iphe.AddressList
            If ipheal.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork Then
                GetIPv4Address = ipheal
               ' MsgBox(ipheal.ToString, MsgBoxStyle.Critical, "ERROR")

           End If
        Next

    End Function
于 2014-10-14T15:38:22.057 に答える