运行程序就自动连接一个域名然后把IP自动显示在text1上,代码怎么写啊

解决方案 »

  1.   

    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