在 VB.NET 中获取本地 IP 地址 (IPV4) - 错误“Resolve is obsoleted for this type”较新版本

Ada*_*dam 3 vb.net

我这里有显示主机 IP 地址的代码,但它给了我一个错误。我怎样才能解决这个问题?

并摆脱Resolve 对于这种类型的东西来说已经过时了。

错误信息


Description
-----------------------------------------------------------------
  Public Shared Overloads Function Resolve(hostName As String)
  As IPHostEntry' is obsolete:

  Resolve is obsoleted for this type. Please use GetHostEntry instead.

  http://go.microsoft.com/fwlink/?linkid=14202'


Severity  Code     Project           Line  Suppression  State
-----------------------------------------------------------------
Warning   BC40000  UltimateDiskless  270                Active

File
-----
C:\Users\Jadam\Desktop\Ultimate Diskless\UltimateDiskless\UltimateDiskless\PacketScanner\frmMain.vb
Run Code Online (Sandbox Code Playgroud)

代码

    Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim hosts() As IPAddress = Dns.Resolve(Dns.GetHostName()).AddressList <==**This One Has The error**

        Dim i As Integer

        If hosts.Length = 0 Then Throw New NotSupportedException("This computer does not have non-loopback interfaces installed!")
        For i = 0 To hosts.Length - 1
            MonitorMenuItem.MenuItems.Add(hosts(i).ToString(), New EventHandler(AddressOf Me.OnHostsClick))
            HostsMenu.MenuItems.Add(hosts(i).ToString(), New EventHandler(AddressOf Me.OnHostsClick))
        Next

        ReDim m_PacketMonitors(HostsMenu.MenuItems.Count - 1)

        For i = 0 To m_PacketMonitors.Length - 1
            m_PacketMonitors(i) = New Monitor(hosts(i))
            AddHandler m_PacketMonitors(i).NewPacket, AddressOf Me.OnNewPacket
        Next
        m_Packets = New ArrayList

    End Sub

Run Code Online (Sandbox Code Playgroud)

Mar*_*tin 5

本例中的错误清楚地告诉您如何解决此问题:

此类型的 Resolve 已过时,请改用 GetHostEntry

但是,由于您实际上需要 IP 地址,因此获取此地址的正确方法现在是使用Dns.GetHostAddresses

Dim hosts() As IPAddress = Dns.GetHostAddresses(Dns.GetHostName())
Run Code Online (Sandbox Code Playgroud)

的文档GetHostAddresses这里

仅编辑有关 IPv4 地址的以下 OP 评论

hosts()您可以使用以下代码使用结果来查找 IPv4 地址:

For Each address As IPAddress In hosts
    If address.AddressFamily = AddressFamily.InterNetwork Then
        Console.WriteLine($"{address} is IPv4")
    End If
Next
Run Code Online (Sandbox Code Playgroud)

AddressFamily是 intSystem.Net.Sockets命名空间(如果您还没有导入它)。