本人想用WinSock控件编写一个C/S系统。
近日遇到了一个问题那就是:我每次联上服务器,服务器端的ConnectionRequest事件已经响应,可客户端却还在尝试联接。Winsock.state为6。为什么联接请求已经响应说明客户端与服务器端已经联接上了,Winsock.state应为7,可实际为6.
望高手解决。
相关源码如下:
StartTime = Timer
PauseTime = 15
Do While Not wskSend.State = 7
           
        If Timer > PauseTime + StartTime Then  '5 秒后超时退出
           wskSend.Close
           GoTo Failure
        End If
        Call connectToServer(wskSend)
        DoEvents
Loop
Public Sub connectToServer(Socket As Winsock)
   Select Case Socket.State
        Case 6
        Case 7
        Case Else
            Socket.Close
            Socket.RemoteHost = Trim(BUSINESS_NADD)
            Socket.RemotePort = Trim(SENDPORT)
            Socket.Connect
    End SelectEnd Sub还有DoEvent是什么意思?

解决方案 »

  1.   

    你用的是轮询的方式,最好用事件响应的方式,一旦连接成功会触发Connect事件,DoEvent语句是将控制权交给系统,直到代码执行,很容易出问题。
      

  2.   

    Private Sub Winsock1_Connect()
        '在这里加入连接成功后要做的操作
    End SubPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
        '在这里加入连接失败后的操作
    End Sub
      

  3.   

    doevents 它的作用是转让控制权,以便操作系统处理事件,一般使用在循环次数过多导致此程序效率过低。
      

  4.   

    Winsock1.RemoteHost = Trim(Combo1.Text)         '我们定下来的规则是端口是501
    Winsock1.RemotePort = "501"                  'Text4.Text
    Winsock1.ConnectDim i As Long
    i = 1DoDoEvents
    i = i + 1
    Loop Until (Winsock1.State <> sckConnecting) Or (i = 800000)If Winsock1.State <> sckConnected Then
        MsgBox "无法连接服务器,请检查您的网络联接", vbOKOnly, "联合商桥"
        Command1.Enabled = True
        Command2.Enabled = True
        Winsock1.Close
        Exit Sub
    End IfDim strdata As Stringstrdata = ""
    i = 1Sendstr = "'user='" & Text1.Text & "',password='" & Text2.Text & "',getftpaddress,"Winsock1.SendData SendstrDo
     Winsock1.GetData strdata, vbString
        DoEvents
        i = i + 1
    Loop Until strdata <> "" Or (i = 80000)strdata = RealRevStr(strdata)If Trim(strdata) = "userpasswordnotright" Then
    MsgBox "您的帐号密码不对!", vbOKOnly, "联合商桥"
    Command1.Enabled = True
    Command2.Enabled = True
    Winsock1.Close
    Exit Sub
    End IfIf Trim(Combo1.Text) = "211.167.68.114" Or Trim(Combo1.Text) = "211.167.68.111" Then
        IsUp = True                                 '确认是用114
    End If    If Trim(strdata) = "nopath" And IsUp Then
            MsgBox "系统发现此帐号可能正在被另一个用户使用!如需帮助,请咨询您的服务商", vbOKOnly, "联合商桥"
         '   Command1.Enabled = True
         '   Command2.Enabled = True
         '   Winsock1.Close
         '   Exit Sub
         
        End IfWinsock1.Close
    你可以看一下
      

  5.   

    如果还不会给我法邮件[email protected]