按照前一个程序,得到很多连续的IP地址.而不是指定的的计算机的IP地址.

解决方案 »

  1.   

    修改的代码,测试通过:
    Private Type WSAdata
        wVersion As Integer
        wHighVersion As Integer
        szDescription(0 To 255) As Byte
        szSystemStatus(0 To 128) As Byte
        iMaxSockets As Integer
        iMaxUdpDg As Integer
        lpVendorInfo As Long
    End Type
    Private Type Hostent
        h_name As Long
        h_aliases As Long
        h_addrtype As Integer
        h_length As Integer
        h_addr_list As Long
    End TypePrivate Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal HostName As String) As Long
    Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVersionRequired&, lpWSAdata As WSAdata) As Long
    Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
    Private Declare Sub CopyMemoryIP Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)Public Function GetIpadd(objhost As String) As String
        Dim HostName As String
        Dim lpWSAdata As WSAdata    Dim lpHost As Long
        Dim HOST As Hostent
        Dim dwIPAddr As Long
        Dim tmpIPAddr() As Byte
        Dim sIPAddr As String    HostName = objhost
        
        Call WSAStartup(&H101, lpWSAdata)
        lpHost = GetHostByName(HostName + String(64 - Len(HostName), 0))    If lpHost <> 0 Then
            CopyMemoryIP HOST, lpHost, Len(HOST)
            CopyMemoryIP dwIPAddr, HOST.h_addr_list, 4
            ReDim tmpIPAddr(1 To HOST.h_length)
            CopyMemoryIP tmpIPAddr(1), dwIPAddr, HOST.h_length
            For I = 1 To HOST.h_length
                sIPAddr = sIPAddr & tmpIPAddr(I) & "."
            Next        GetIpadd = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
        Else
            GetIpadd = ""
        End If
        Call WSACleanup
    End Function