那你必要用VB,因为1个VB需要一个太大的运行库,2vb处理wsock32.dll很不方便,所以最好用C\C++

解决方案 »

  1.   

    那你不要用VB,因为1个VB需要一个太大的运行库,2vb处理wsock32.dll很不方便,所以最好用C\C++
      

  2.   

    本版的FAQ:
    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=34360
    中所写的不太完整,而且,当中所用的是远程登陆的API函数,不是WINSOCK.DLL库中的API函数,有谁知道如何运用WINSOCK.DLL库中的API函数?
      

  3.   

    不好意思,写错了,是wsock32.dll
      

  4.   

    Socket Api 做得,希望能对你有帮助,这个只不过是个发送email的,用的阻塞模式http://www.csdn.net/cnshare/soft/16/16243.shtm
    如果你用的话可以用消息循环的那种就好了有个vb做的代理服务器代码,慢慢给你贴上来
      

  5.   

    frmmain.frmOption ExplicitPrivate Sub Form_Load()On Error Resume Next
    Dim x As LongfrmMain.Hide
    App.TaskVisible = FalseIf App.PrevInstance = True Then Unload Me    StartWinsock vbNullString
        StartSubclass frmMain
        listenSocket = ListenForConnect(SERVER_PORT, frmMain.hwnd)
        If listenSocket = -1 Then Unload frmMain
            
    End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        Dim Cnt As Long
        For Cnt = 1 To Sockets.Count
            closesocket Sockets.Item(Cnt)
        Next Cnt
        closesocket listenSocket
        StopSubclass Me
        EndWinsock
        Set Sockets = Nothing
        Set IPAddresses = Nothing
        
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    End
    End Sub
      

  6.   

    mdlserver.basOption ExplicitPublic Const SERVER_PORT As Long = 8080
    Public Const GWL_WNDPROC = (-4)Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public listenSocket As Long
    Public IPAddresses As New Collection
    Public Sockets As New Collection
    Private PrevProc As LongPublic Sub StartSubclass(F As Form)
        PrevProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf WindowProc)
    End SubPublic Sub StopSubclass(F As Form)
        If PrevProc <> 0 Then SetWindowLong F.hwnd, GWL_WNDPROC, PrevProc
    End SubPublic Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If uMsg = WINSOCK_MESSAGE Then
            ProcessMessage wParam, lParam
        Else
            WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
        End If
    End FunctionPublic Function ProcessMessage(ByVal wParam As Long, ByVal lParam As Long) 'wParam = Socket Handle, lParam = connection messageDim rc As String
        Select Case lParam
            Case FD_ACCEPT
                Dim tempSocket As Long, tempAddr As sockaddr
                tempSocket = accept(wParam, tempAddr, Len(tempAddr))
                AddSocket tempSocket, getascip(tempAddr.sin_addr)
                        
            Case FD_WRITE
            Case FD_READ
                        Dim sData As String, lRet As Long, szBuf As String
                Do
                    szBuf = String(256, 0)
                    lRet = recv(wParam, ByVal szBuf, Len(szBuf), 0)
                    If lRet > 0 Then sData = sData + Left$(szBuf, lRet)
                Loop Until lRet <= 0
                
                If Trim$(sData) = "" Then Exit Function            rc = MainProcess(sData)
                
       
                 SendData wParam, rc
                 closesocket wParam
            Case Else 'FD_CLOSE
                RemoveSocket wParam
        End Select
    End FunctionPublic Sub AddSocket(ByVal s As Long, ByVal FromIP As String)
    On Local Error Resume Next
        IPAddresses.Add FromIP, CStr(s)
        Sockets.Add s, CStr(s)
    End SubPublic Sub RemoveSocket(ByVal s As Long)
    On Local Error Resume Next
        IPAddresses.Remove CStr(s)
        Sockets.Remove CStr(s)
    End SubPublic Function GetIPFromSocket(lSocket As Long) As String
    On Local Error GoTo ErrHandler
        GetIPFromSocket = IPAddresses.Item(CStr(lSocket))
    Exit FunctionErrHandler:
        GetIPFromSocket = "[未知IP地址]"
    End Function
      

  7.   

    modhttp.basPublic Function ProcHTTP(strData As String) As String
    Dim FindGet As Integer, FindPost As Integer, spc2 As Integer
    If Mid$(strData$, 1, 3) = "GET" Then
    FindGet = InStr(strData$, "GET ")
    spc2 = InStr(FindGet + 5, strData$, " ")
    ProcHTTP = Mid$(strData$, FindGet + 4, spc2 - (FindGet + 4))
    ElseIf Mid$(strData$, 1, 4) = "POST" Then
    FindPost = InStr(strData$, "POST ")
    spc2 = InStr(FindPost + 5, strData$, " ")
    ProcHTTP = Mid$(strData$, FindPost + 5, spc2 - (FindPost + 5))
    End If
    End FunctionPublic Function TestPage()
    Dim x As String
    x = "HTTP/1.1 200 OK" & vbCrLf
    x = x & "Server: HTTP Proxy Server Powered by 小金" & vbCrLf & vbCrLfx = x & vbCrLf & "<HTML><HEAD><TITLE>HTTP Proxy .::Powered by 小金::.</TITLE>" & _
    "<META content=""text/html; charset=gb2312"" http-equiv=Content-Type>" & _
    "<style type=text/css>A:visited{TEXT-DECORATION: none} A:active{TEXT-DECORATION: none} A:hover{TEXT-DECORATION: underline overline} A:link{text-decoration: none;} .t{LINE-HEIGHT: 1.4} BODY{FONT-FAMILY: 宋体; FONT-SIZE: 9pt; SCROLLBAR-HIGHLIGHT-COLOR: buttonface; SCROLLBAR-SHADOW-COLOR: buttonface; SCROLLBAR-3DLIGHT-COLOR: buttonhighlight; SCROLLBAR-TRACK-COLOR: #eeeeee; " & _
    "SCROLLBAR-DARKSHADOW-COLOR: buttonshadow} TD{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} DIV{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} FORM{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} OPTION{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} P{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} TD{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} BR{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} INPUT{BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 1px; PADDING-LEFT: 1px; BORDER-LEFT-WIDTH: 1px; FONT-SIZE: 9pt; BORDER-LEFT-COLOR: #cccccc; BORDER-BOTTOM-WIDTH: 1px; BORDER-BOTTOM-COLOR: #cccccc; PADDING-BOTTOM: 1px; BORDER-TOP-COLOR: #cccccc; PADDING-TOP: 1px; HEIGHT: 18px; BORDER-RIGHT-WIDTH: 1px; BORDER-RIGHT-COLOR: #cccccc} textarea {border-width: 1; border-color: #000000; background-color: #efefef; font-family: 宋体; font-size: 9pt; font-style: bold;} select {border-width: 1; border-color: #000000; background-color: #efefef; font-family: 宋体; font-size: 9pt; font-style: bold;}</style>" & _
    "</HEAD><BODY aLink=#ffffff bgColor=#4f9fdf bottomMargin=0 leftMargin=0 rightMargin=0 topMargin=0 vLink=#ffffff>" & _
    "<p align=""center""><b><font face=""Tahoma"" size=""4"" color=""#660066""><b><font color=""#FFFFFF"">HTTP Proxy 工作正常</font></font></font></b></font></b><img src=""http://sadan9.com/xj/pb.gif"" width=""170"" height=""50""></p>" & _
    "<table width=""100%"" border=""0"" cellspacing=""0"" cellpadding=""0""><tr><td width=""41%""><form action=""stop""><p align=""center""><font color=""#FFFFFF"" size=""6""><b><font size=""7""></font></b></font></p></td></tr></table><hr width=""100%"" size=""1"" color=""#FFFFFF"" ><p align=""center""><font face=""Arial, Helvetica, sans-serif"" size=""2"" color=""#FFFFFF""><b>&copy;&nbsp;2002 小金 版权所有&nbsp;</b></font></p></BODY></HTML>"TestPage = x
    End FunctionPublic Function ErrPage()
    Dim x As String
    x = "HTTP/1.1 500 Server Error" & vbCrLf
    x = x & "Server: HTTP Proxy Server Powered by 小金" & vbCrLf & vbCrLfx = x & vbCrLf & "<HTML><HEAD><TITLE>HTTP Proxy .::Powered by 小金::.</TITLE>" & _
    "<META content=""text/html; charset=gb2312"" http-equiv=Content-Type>" & _
    "<style type=text/css>A:visited{TEXT-DECORATION: none} A:active{TEXT-DECORATION: none} A:hover{TEXT-DECORATION: underline overline} A:link{text-decoration: none;} .t{LINE-HEIGHT: 1.4} BODY{FONT-FAMILY: 宋体; FONT-SIZE: 9pt; SCROLLBAR-HIGHLIGHT-COLOR: buttonface; SCROLLBAR-SHADOW-COLOR: buttonface; SCROLLBAR-3DLIGHT-COLOR: buttonhighlight; SCROLLBAR-TRACK-COLOR: #eeeeee; " & _
    "SCROLLBAR-DARKSHADOW-COLOR: buttonshadow} TD{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} DIV{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} FORM{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} OPTION{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} P{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} TD{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} BR{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} INPUT{BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 1px; PADDING-LEFT: 1px; BORDER-LEFT-WIDTH: 1px; FONT-SIZE: 9pt; BORDER-LEFT-COLOR: #cccccc; BORDER-BOTTOM-WIDTH: 1px; BORDER-BOTTOM-COLOR: #cccccc; PADDING-BOTTOM: 1px; BORDER-TOP-COLOR: #cccccc; PADDING-TOP: 1px; HEIGHT: 18px; BORDER-RIGHT-WIDTH: 1px; BORDER-RIGHT-COLOR: #cccccc} textarea {border-width: 1; border-color: #000000; background-color: #efefef; font-family: 宋体; font-size: 9pt; font-style: bold;} select {border-width: 1; border-color: #000000; background-color: #efefef; font-family: 宋体; font-size: 9pt; font-style: bold;}</style>" & _
    "</HEAD><BODY aLink=#ffffff bgColor=#4f9fdf bottomMargin=0 leftMargin=0 rightMargin=0 topMargin=0 vLink=#ffffff>" & _
    "<p align=""center""><b><font face=""Tahoma"" size=""4"" color=""#660066""><b><font color=""#FFFFFF"">您请求的页面无法连接</font></font></font></b></font></b><img src=""http://sadan9.com/xj/pb.gif"" width=""170"" height=""50""></p>" & _
    "<table width=""100%"" border=""0"" cellspacing=""0"" cellpadding=""0""><tr><td width=""41%""><form action=""stop""><p align=""center""><font color=""#FFFFFF"" size=""6""><b><font size=""7""></font></b></font></p></td></tr></table><hr width=""100%"" size=""1"" color=""#FFFFFF"" ><p align=""center""><font face=""Arial, Helvetica, sans-serif"" size=""2"" color=""#FFFFFF""><b>&copy;&nbsp;2002 小金 版权所有&nbsp;</b></font></p></BODY></HTML>"ErrPage = x
    End FunctionFunction ConnectServer(strURL As String)
    Dim Sock As Integer
    Dim Bytes As Integer
    Dim rc As Long
    Dim strMsg As String
    Dim sData As String, lRet As Long, szBuf As String  Dim SocketBuffer As sockaddr
      Dim IpAddr As Long    SlashPos = InStr(1, strURL, "/")
        If SlashPos = 0 Then SlashPos = Len(strURL) + 1
        strPath = Mid$(strURL, SlashPos)
        If strPath = "" Then strPath = "/"
        strHost = Mid$(strURL, 1, SlashPos - 1)Call StartWinsock(vbNullString)   '创建套接字
       Sock = socket(AF_INET, SOCK_STREAM, 0)
       If Sock = SOCKET_ERROR Then Exit Function   If rc = SOCKET_ERROR Then Exit Function
       IpAddr = GetHostByNameAlias(strHost)
       If IpAddr = -1 Then
       ConnectServer = ErrPage
           Exit Function
       End If
       
       With SocketBuffer
           .sin_family = AF_INET
           .sin_port = htons(80)
           .sin_addr = IpAddr
           .sin_zero = String$(8, 0)
       End With
       
       DoEvents
       
       '连接服务器
       rc = Connect(Sock, SocketBuffer, Len(SocketBuffer))
       
       If rc = SOCKET_ERROR Then
          ConnectServer = ErrPage
           closesocket Sock
           Exit Function
         Else
       End If
       
       DoEvents
       
       'HTTP报文
       strMsg = "GET " & tmpHost & strPath & " HTTP/1.0" & vbCrLf
       strMsg = strMsg & "Accept: */*" & vbCrLf
       strMsg = strMsg & "User-Agent: " & App.Title & vbCrLf
       strMsg = strMsg & "Host: " & strHost & vbCrLf
       strMsg = strMsg & vbCrLf
          
       '发送数据
       SendData Sock, strMsg
     
    DoEvents            Do
                    szBuf = String(256, 0)
                    lRet = recv(Sock, ByVal szBuf, Len(szBuf), 0)
                    If lRet > 0 Then sData = sData + Left$(szBuf, lRet)
                Loop Until lRet <= 0closesocket Sock
               
    ConnectServer = sData
    End Function
      

  8.   

    modmain.basOption ExplicitPublic Function ModifyString(strModString As String, strSrc As String, sgnModify As Variant)
    On Error Resume Next
      If strSrc <> sgnModify Then
        While InStr(strModString, strSrc) <> 0
          strModString = Left(strModString, InStr(strModString, strSrc) - 1) & sgnModify & Mid(strModString, InStr(strModString, strSrc) + Len(strSrc))
        Wend
      End If
    ModifyString = strModString
    End FunctionFunction MainProcess(sData As String) As String
    On Error Resume Next
    Dim ProxyData As StringsData = Trim(sData)If sData = "" Then MainProcess = TestPageIf InStr(sData, "http://") <> 0 Then
    sData = ProcHTTP(sData)
    sData = ModifyString(sData, "http://", "")
    MainProcess = ConnectServer(sData)
    Else
    MainProcess = TestPage
    End If
    End Function
      

  9.   

    wsksock.basOption ExplicitPublic Const WINSOCK_MESSAGE As Long = 1025Public Const FD_SETSIZE = 64
    Type IN_ADDR
        S_un_b(1 To 4) As Byte
        S_un_w(1 To 2) As Integer
        S_addr As Long
    End TypeType fd_set
        fd_count As Integer
        fd_array(FD_SETSIZE) As Integer
    End TypeType timeval
        tv_sec As Long
        tv_usec As Long
    End TypeType HOSTENT
        hName As Long
        hAliases As Long
        hAddrType As Integer
        hLen As Integer
        hAddrList As Long
    End TypePublic Const hostent_size = 16Type servent
        s_name As Long
        s_aliases As Long
        s_port As Integer
        s_proto As Long
    End Type
    Public Const servent_size = 14Type protoent
        p_name As Long
        p_aliases As Long
        p_proto As Integer
    End Type
    Public Const protoent_size = 10Public Const IPPROTO_TCP = 6
    Public Const IPPROTO_UDP = 17Public Const INADDR_NONE = &HFFFF
    Public Const INADDR_ANY = &H0Type sockaddr
        sin_family As Integer
        sin_port As Integer
        sin_addr As Long
        sin_zero As String * 8
    End Type
    Public Const sockaddr_size = 16
    Public saZero As sockaddr
    Public Const WSA_DESCRIPTIONLEN = 256
    Public Const WSA_DescriptionSize = WSA_DESCRIPTIONLEN + 1Public Const WSA_SYS_STATUS_LEN = 128
    Public Const WSA_SysStatusSize = WSA_SYS_STATUS_LEN + 1Type WSADataType
        wVersion As Integer
        wHighVersion As Integer
        szDescription As String * WSA_DescriptionSize
        szSystemStatus As String * WSA_SysStatusSize
        iMaxSockets As Integer
        iMaxUdpDg As Integer
        lpVendorInfo As Long
    End TypePublic Const INVALID_SOCKET = -1
    Public Const SOCKET_ERROR = -1Public Const SOCK_STREAM = 1
    Public Const SOCK_DGRAM = 2Public Const MAXGETHOSTSTRUCT = 1024Public Const AF_INET = 2
    Public Const PF_INET = 2Type LingerType
        l_onoff As Integer
        l_linger As Integer
    End Type
      

  10.   

    Declare Sub RtlMoveMemory Lib "kernel32" _
       (hpvDest As Any, _
        ByVal hpvSource As Long, _
        ByVal cbCopy As Long)
        
        Public Declare Sub CopyMemoryIP Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
        Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Public Declare Sub MemCopy Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal cb&)
        Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long
        
        Public Const SOL_SOCKET = &HFFFF&
        Public Const SO_LINGER = &H80&
        Public Const FD_READ = &H1&
        Public Const FD_WRITE = &H2&
        Public Const FD_OOB = &H4&
        Public Const FD_ACCEPT = &H8&
        Public Const FD_CONNECT = &H10&
        Public Const FD_CLOSE = &H20&
        
        Public Declare Function accept Lib "wsock32.dll" (ByVal s As Long, addr As sockaddr, addrlen As Long) As Long
        Public Declare Function bind Lib "wsock32.dll" (ByVal s As Long, addr As sockaddr, ByVal namelen As Long) As Long
        Public Declare Function closesocket Lib "wsock32.dll" (ByVal s As Long) As Long
        Public Declare Function Connect Lib "wsock32.dll" Alias "connect" (ByVal s As Long, addr As sockaddr, ByVal namelen As Long) As Long
        Public Declare Function ioctlsocket Lib "wsock32.dll" (ByVal s As Long, ByVal CMD As Long, argp As Long) As Long
        Public Declare Function getpeername Lib "wsock32.dll" (ByVal s As Long, sName As sockaddr, namelen As Long) As Long
        Public Declare Function getsockname Lib "wsock32.dll" (ByVal s As Long, sName As sockaddr, namelen As Long) As Long
        Public Declare Function getsockopt Lib "wsock32.dll" (ByVal s As Long, ByVal Level As Long, ByVal optname As Long, optval As Any, optlen As Long) As Long
        Public Declare Function htonl Lib "wsock32.dll" (ByVal hostlong As Long) As Long
        Public Declare Function htons Lib "wsock32.dll" (ByVal hostshort As Long) As Integer
        Public Declare Function inet_addr Lib "wsock32.dll" (ByVal cp As String) As Long
        Public Declare Function inet_ntoa Lib "wsock32.dll" (ByVal inn As Long) As Long
        Public Declare Function listen Lib "wsock32.dll" (ByVal s As Long, ByVal backlog As Long) As Long
        Public Declare Function ntohl Lib "wsock32.dll" (ByVal netlong As Long) As Long
        Public Declare Function ntohs Lib "wsock32.dll" (ByVal netshort As Long) As Integer
        Public Declare Function recv Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags As Long) As Long
        Public Declare Function recvfrom Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags As Long, From As sockaddr, fromlen As Long) As Long
        Public Declare Function ws_select Lib "wsock32.dll" Alias "select" (ByVal nfds As Long, readfds As fd_set, writefds As fd_set, exceptfds As fd_set, TimeOut As timeval) As Long
        Public Declare Function Send Lib "wsock32.dll" Alias "send" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags As Long) As Long
        Public Declare Function sendto Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags As Long, to_addr As sockaddr, ByVal tolen As Long) As Long
        Public Declare Function setsockopt Lib "wsock32.dll" (ByVal s As Long, ByVal Level As Long, ByVal optname As Long, optval As Any, ByVal optlen As Long) As Long
        Public Declare Function ShutDown Lib "wsock32.dll" Alias "shutdown" (ByVal s As Long, ByVal how As Long) As Long
        Public Declare Function socket Lib "wsock32.dll" (ByVal af As Long, ByVal s_type As Long, ByVal protocol As Long) As Long
        
        Public Declare Function gethostbyaddr Lib "wsock32.dll" (addr As Long, ByVal addr_len As Long, ByVal addr_type As Long) As Long
        Public Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal host_name As String) As Long
        Public Declare Function gethostname Lib "wsock32.dll" (ByVal host_name As String, ByVal namelen As Long) As Long
        Public Declare Function getservbyport Lib "wsock32.dll" (ByVal Port As Long, ByVal proto As String) As Long
        Public Declare Function getservbyname Lib "wsock32.dll" (ByVal serv_name As String, ByVal proto As String) As Long
        Public Declare Function getprotobynumber Lib "wsock32.dll" (ByVal proto As Long) As Long
        Public Declare Function getprotobyname Lib "wsock32.dll" (ByVal proto_name As String) As Long
        
        Public Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVR As Long, lpWSAD As WSADataType) As Long
        Public Declare Function WSACleanup Lib "wsock32.dll" () As Long
        Public Declare Sub WSASetLastError Lib "wsock32.dll" (ByVal iError As Long)
        Public Declare Function WSAGetLastError Lib "wsock32.dll" () As Long
        Public Declare Function WSAIsBlocking Lib "wsock32.dll" () As Long
        Public Declare Function WSAUnhookBlockingHook Lib "wsock32.dll" () As Long
        Public Declare Function WSASetBlockingHook Lib "wsock32.dll" (ByVal lpBlockFunc As Long) As Long
        Public Declare Function WSACancelBlockingCall Lib "wsock32.dll" () As Long
        Public Declare Function WSAAsyncGetServByName Lib "wsock32.dll" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal serv_name As String, ByVal proto As String, buf As Any, ByVal buflen As Long) As Long
        Public Declare Function WSAAsyncGetServByPort Lib "wsock32.dll" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal Port As Long, ByVal proto As String, buf As Any, ByVal buflen As Long) As Long
        Public Declare Function WSAAsyncGetProtoByName Lib "wsock32.dll" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal proto_name As String, buf As Any, ByVal buflen As Long) As Long
        Public Declare Function WSAAsyncGetProtoByNumber Lib "wsock32.dll" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal number As Long, buf As Any, ByVal buflen As Long) As Long
        Public Declare Function WSAAsyncGetHostByName Lib "wsock32.dll" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal host_name As String, buf As Any, ByVal buflen As Long) As Long
        Public Declare Function WSAAsyncGetHostByAddr Lib "wsock32.dll" (ByVal hwnd As Long, ByVal wMsg As Long, addr As Long, ByVal addr_len As Long, ByVal addr_type As Long, buf As Any, ByVal buflen As Long) As Long
        Public Declare Function WSACancelAsyncRequest Lib "wsock32.dll" (ByVal hAsyncTaskHandle As Long) As Long
        Public Declare Function WSAAsyncSelect Lib "wsock32.dll" (ByVal s As Long, ByVal hwnd As Long, ByVal wMsg As Long, ByVal lEvent As Long) As Long
        Public Declare Function WSARecvEx Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal Flags As Long) As LongPublic MySocket%
    Public SockReadBuffer$
    Public Const WSA_NoName = "Unknown"
      

  11.   

    Public WSAStartedUp As BooleanPublic Function WSAGetAsyncBufLen(ByVal lParam As Long) As Long
        If (lParam And &HFFFF&) > &H7FFF Then
            WSAGetAsyncBufLen = (lParam And &HFFFF&) - &H10000
        Else
            WSAGetAsyncBufLen = lParam And &HFFFF&
        End If
    End FunctionPublic Function WSAGetSelectEvent(ByVal lParam As Long) As Integer
        If (lParam And &HFFFF&) > &H7FFF Then
            WSAGetSelectEvent = (lParam And &HFFFF&) - &H10000
        Else
            WSAGetSelectEvent = lParam And &HFFFF&
        End If
    End FunctionPublic Function WSAGetAsyncError(ByVal lParam As Long) As Integer
        WSAGetAsyncError = (lParam And &HFFFF0000) \ &H10000
    End FunctionFunction AddrToIP(ByVal AddrOrIP$) As String
        On Error Resume Next
        AddrToIP$ = getascip(GetHostByNameAlias(AddrOrIP$))
        If Err Then AddrToIP$ = "255.255.255.255"
    End FunctionSub EndWinsock()
        Dim Ret&
        If WSAIsBlocking() Then
            Ret = WSACancelBlockingCall()
        End If
        Ret = WSACleanup()
        WSAStartedUp = False
    End SubFunction getascip(ByVal inn As Long) As String
        On Error Resume Next
        Dim lpStr&
    #If Win16 Then
        Dim nStr%
    #ElseIf Win32 Then
        Dim nStr&
    #End If
        Dim retString$
        retString = String(32, 0)
        lpStr = inet_ntoa(inn)
        If lpStr = 0 Then
            getascip = "255.255.255.255"
            Exit Function
        End If
        nStr = lstrlen(lpStr)
        If nStr > 32 Then nStr = 32
        MemCopy ByVal retString, ByVal lpStr, nStr
        retString = Left(retString, nStr)
        getascip = retString
        If Err Then getascip = "255.255.255.255"
    End FunctionFunction GetLocalHostName() As String
        Dim dummy&
        Dim LocalName$
        Dim s$
        On Error Resume Next
        LocalName = String(256, 0)
        LocalName = WSA_NoName
        dummy = 1
        s = String(256, 0)
        dummy = gethostname(s, 256)
        If dummy = 0 Then
            s = Left(s, InStr(s, Chr(0)) - 1)
            If Len(s) > 0 Then
                LocalName = s
            End If
        End If
        GetLocalHostName = LocalName
        If Err Then GetLocalHostName = WSA_NoName
    End Function
        
        Function GetSockAddress(ByVal s&) As String
        Dim addrlen&
        Dim Ret&
        On Error Resume Next
        Dim sa As sockaddr
        Dim szRet$
        szRet = String(32, 0)
        addrlen = sockaddr_size
        Ret = getsockname(s, sa, addrlen)
        If Ret = 0 Then
            GetSockAddress = SockAddressToString(sa)
        Else
            GetSockAddress = ""
        End If
        If Err Then GetSockAddress = ""
    End FunctionFunction GetHostByNameAlias(ByVal hostname$) As Long
        On Error Resume Next
        
        Dim phe&
        Dim heDestHost As HOSTENT
        Dim addrList&
        Dim retIP&    retIP = inet_addr(hostname)
        If retIP = INADDR_NONE Then
            phe = GetHostByName(hostname)
            If phe <> 0 Then
                MemCopy heDestHost, ByVal phe, hostent_size
                MemCopy addrList, ByVal heDestHost.hAddrList, 4
                MemCopy retIP, ByVal addrList, heDestHost.hLen
            Else
                retIP = INADDR_NONE
            End If
        End If
        GetHostByNameAlias = retIP
        If Err Then GetHostByNameAlias = INADDR_NONE
    End FunctionFunction IpToAddr(ByVal AddrOrIP$) As String
        On Error Resume Next
        IpToAddr = GetHostByAddress(GetHostByNameAlias(AddrOrIP$))
        If Err Then IpToAddr = WSA_NoName
    End FunctionPublic Function ListenForConnect(ByVal Port&, ByVal HWndToMsg&) As Long
        Dim s&, dummy&
        Dim SelectOps&
        Dim sockin As sockaddr
        sockin = saZero
        sockin.sin_family = AF_INET
        sockin.sin_port = htons(Port)
        If sockin.sin_port = INVALID_SOCKET Then
            ListenForConnect = INVALID_SOCKET
            Exit Function
        End If
        sockin.sin_addr = htonl(INADDR_ANY)
        If sockin.sin_addr = INADDR_NONE Then
            ListenForConnect = INVALID_SOCKET
            Exit Function
        End If
        s = socket(PF_INET, SOCK_STREAM, 0)
        If s < 0 Then
            ListenForConnect = INVALID_SOCKET
            Exit Function
        End If
        If bind(s, sockin, sockaddr_size) Then
            If s > 0 Then
                dummy = closesocket(s)
            End If
            ListenForConnect = INVALID_SOCKET
            Exit Function
        End If
        SelectOps = FD_READ Or FD_WRITE Or FD_CLOSE Or FD_ACCEPT
        If WSAAsyncSelect(s, HWndToMsg, ByVal WINSOCK_MESSAGE, ByVal SelectOps) Then
            If s > 0 Then
                dummy = closesocket(s)
            End If
            ListenForConnect = SOCKET_ERROR
            Exit Function
        End If
        
        If listen(s, 1) Then
            If s > 0 Then
                dummy = closesocket(s)
            End If
            ListenForConnect = INVALID_SOCKET
            Exit Function
        End If
        ListenForConnect = s
    End Function
      

  12.   

    Public Function SendData(ByVal intSocket&, vMessage As Variant) As Long  Dim TheMsg() As Byte, sTemp$    TheMsg = ""
        Select Case VarType(vMessage)
          Case 8209
            sTemp = vMessage
            TheMsg = sTemp
          Case 8
            sTemp = StrConv(vMessage, vbFromUnicode)
          Case Else
            sTemp = CStr(vMessage)
            sTemp = StrConv(vMessage, vbFromUnicode)
        End Select
        
        TheMsg = sTemp
        
        If UBound(TheMsg) > -1 Then
            SendData = Send(intSocket, TheMsg(0), UBound(TheMsg) + 1, 0)
        End If
        
        If SendData = SOCKET_ERROR Then
            closesocket intSocket
            Call EndWinsock
            Exit Function
        End IfEnd FunctionPublic Function SockAddressToString(sa As sockaddr) As String
        SockAddressToString = getascip(sa.sin_addr) & ":" & ntohs(sa.sin_port)
    End FunctionPublic Function StartWinsock(sDescription As String) As Boolean
        Dim StartupData As WSADataType
        If Not WSAStartedUp Then
            If Not WSAStartup(&H101, StartupData) Then
                WSAStartedUp = True
                sDescription = StartupData.szDescription
            Else
                WSAStartedUp = False
            End If
        End If
        StartWinsock = WSAStartedUp
    End FunctionFunction GetHost(IP As String)
    On Error Resume Next
       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(IP)
       
       If hostent_addr = 0 Then
    GetHost = IP
    Exit Function
       End If
       
       RtlMoveMemory Host, hostent_addr, LenB(Host)
       RtlMoveMemory hostip_addr, Host.hAddrList, 4
       
       ReDim temp_ip_address(1 To Host.hLen)
       RtlMoveMemory temp_ip_address(1), hostip_addr, Host.hLen
       
       For I = 1 To Host.hLen
          ip_address = ip_address & temp_ip_address(I) & "."
       Next
       ip_address = Mid$(ip_address, 1, Len(ip_address) - 1)
       
       GetHost = ip_address
       
    End FunctionFunction GetHostByAddress(ByVal addr As Long) As String
        On Error Resume Next
        Dim phe&, Ret&
        Dim heDestHost As HOSTENT
        Dim hostname$
        phe = gethostbyaddr(addr, 4, PF_INET)
        
        Debug.Print phe
        If phe <> 0 Then
            MemCopy heDestHost, ByVal phe, hostent_size
            Debug.Print heDestHost.hName
            Debug.Print heDestHost.hAliases
            Debug.Print heDestHost.hAddrType
            Debug.Print heDestHost.hLen
            Debug.Print heDestHost.hAddrList        hostname = String(256, 0)
            MemCopy ByVal hostname, ByVal heDestHost.hName, 256
            GetHostByAddress = Left(hostname, InStr(hostname, Chr(0)) - 1)
        Else
            GetHostByAddress = WSA_NoName
        End If
        If Err Then GetHostByAddress = WSA_NoName
    End FunctionPublic Function GetIPAddress() As String
        Dim sHostName As String * 256
        Dim lpHost As Long
        Dim Host As HOSTENT
        Dim dwIPAddr As Long
        Dim tmpIPAddr() As Byte
        Dim I As Integer
        Dim sIPAddr As String
        If gethostname(sHostName, 256) = SOCKET_ERROR Then
            GetIPAddress = ""
            Exit Function
        End If
        sHostName = Trim$(sHostName)
        lpHost = GetHostByName(sHostName)
        If lpHost = 0 Then
            GetIPAddress = ""
            Exit Function
        End If
        CopyMemoryIP Host, lpHost, Len(Host)
        CopyMemoryIP dwIPAddr, Host.hAddrList, 4
        ReDim tmpIPAddr(1 To Host.hLen)
        CopyMemoryIP tmpIPAddr(1), dwIPAddr, Host.hLen
        For I = 1 To Host.hLen
            sIPAddr = sIPAddr & tmpIPAddr(I) & "."
        Next
        GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
    End Function