办法如下: Private Const WS_VERSION_REQD = &H101 Private Const WS_VERSION_MAJOR = WS_VERSION_REQD &H100 And &HFF& Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF& Private Const MIN_SOCKETS_REQD = 1 Private Const SOCKET_ERROR = -1 Private Const WSADescription_Len = 256 Private Const WSASYS_Status_Len = 128 Private Type HOSTENT hname As Long hAliases As Long hAddrType As Integer hLength As Integer hAddrList As Long End Type Private Type WSADATA wversion As Integer wHighVersion As Integer szDescription(0 To WSADescription_Len) As Byte szSystemStatus(0 To WSASYS_Status_Len) As Byte iMaxSockets As Integer iMaxUdpDg As Integer lpszVendorInfo As Long End Type Private Declare Function gethostbyaddr Lib "WSOCK32.DLL" (addr As Any, ByVal _ byteslen As Integer, addrtype As Integer) As Long Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () 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 Function gethostbyname Lib "WSOCK32.DLL" (ByVal _ hostname$) As Long Private Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest As Any, _ ByVal hpvSource&, ByVal cbCopy&) Function hibyte(ByVal wParam As Integer) '获得整数的高位 hibyte = wParam &H100 And &HFF& End Function Function lobyte(ByVal wParam As Integer) '获得整数的低位 lobyte = wParam And &HFF& End Function Function SocketsInitialize() Dim WSAD As WSADATA Dim iReturn As Integer Dim sLowByte As String, sHighByte As String, sMsg As String iReturn = WSAStartup(WS_VERSION_REQD, WSAD) If iReturn <> 0 Then MsgBox "Winsock.dll 没有反应." End End If If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then sHighByte = Trim$(str$(hibyte(WSAD.wversion))) sLowByte = Trim$(str$(lobyte(WSAD.wversion))) sMsg = "Windows Sockets版本 " & sLowByte & "." & sHighByte sMsg = sMsg & " 不被winsock.dll支持 " MsgBox sMsg End End If If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then sMsg = "这个系统需要的最少Sockets数为 " sMsg = sMsg & Trim$(str$(MIN_SOCKETS_REQD)) MsgBox sMsg End End If End Function Sub SocketsCleanup() Dim lReturn As Long lReturn = WSACleanup() If lReturn <> 0 Then MsgBox "Socket错误 " & Trim$(str$(lReturn)) & " occurred in Cleanup " End End If End Sub Sub Form_Load() '初始化Socket SocketsInitialize End Sub Private Sub Form_Unload(Cancel As Integer) '清除Socket SocketsCleanup End Sub Private Function getip(name As String) As String Dim hostent_addr As Long Dim host As HOSTENT Dim hostip_addr As Long Dim temp_ip_address() As Byte Dim i As Integer Dim ip_address As String hostent_addr = gethostbyname(name) If hostent_addr = 0 Then getip = "" '主机名不能被解释 Exit Function End If RtlMoveMemory host, hostent_addr, LenB(host) RtlMoveMemory hostip_addr, host.hAddrList, 4 ReDim temp_ip_address(1 To host.hLength) RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength For i = 1 To host.hLength ip_address = ip_address & temp_ip_address(i) & "." Next ip_address = Mid$(ip_address, 1, Len(ip_address) - 1) getip = ip_address End Function Private Sub Command1_click() Dim str As String str = getip(Text1.Text) If str = "" Then Text2.Text = "主机名不能被解释" Else Text2.Text = str End If End Sub Private Function getname(addrstr As String) As String Dim hostent_addr As Long Dim host As HOSTENT Dim addr(0 To 50) As Byte Dim addrs As String Dim hname(1 To 50) As Byte Dim str As String Dim i As Integer, j As Integer Dim temp_int As Integer Dim byt As Byte str = Trim$(addrstr) i = 0 j = 0 Do temp_int = 0 i = i + 1 Do While Mid$(str, i, 1) >= "0" And Mid$(str, i, 1) <= "9" And i <= Len(str) temp_int = temp_int * 10 + Mid$(str, i, 1) i = i + 1 Loop If temp_int <= 255 Then addr(j) = temp_int j = j + 1 End If Loop Until Mid$(str, i, 1) <> "." Or i > Len(str) Or temp_int > 255 If temp_int > 255 Then getname = "地址非法" Exit Function End If hostent_addr = gethostbyaddr(addr(0), j, 2) If hostent_addr = 0 Then getname = "此地址无法解析" Exit Function End If RtlMoveMemory host, hostent_addr, LenB(host) RtlMoveMemory hname(1), host.hname, 50 j = 51 For i = 1 To 50 If hname(i) = 0 Then j = i End If If i >= j Then hname(i) = 32 End If Next i getname = Trim$(StrConv(hname, vbUnicode)) End Function Private Sub Command2_Click() Dim name As String name = getname(Text2.Text) If name = "" Then name = "此地址没有域名" End If Text1.Text = name End Sub