先运行服务器端,然后第一次运行客户端没问题,可以通信,但关闭客户端后再运行就报错:
Run-time error '40006'
Wrong protocol or connection state for the requested transaction or request

解决方案 »

  1.   

    不能,可以用.close关闭以后,再用
      

  2.   

    是在客户端关闭还是在服务器端关闭?
    我在客户端的Form_Unload方法已经写了:
    If Winsock1.State <> sckClosed Then Winsock1.Close
      

  3.   

    不行啊。我的服务器端程序:Private Sub Form_Load()
        Winsockserver.LocalPort = 1234
        Winsockserver.Listen
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        If Winsockserver.State <> sckClosed Then
            Winsockserver.Close
        End If
    End SubPrivate Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)
        Dim webData As String
        Winsockserver.GetData webData, vbString '检取当前的数据块
        txtMessage.Text = webData
    End SubPrivate Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)
        If Winsockserver.State <> sckClosed Then Winsockserver.Close
        'Winsockserver.Tag = 0
        Winsockserver.Accept requestID
    End SubPrivate Sub Winsockserver_Close()
        Winsockserver.Close
        'End
    End Sub
      

  4.   

    Private Sub Winsockserver_Close()
        Winsockserver.Close
        Winsockserver.Listen  '你不重新监听,恐怕不行吧?呵呵。再试一下?
        'End
    End Sub
      

  5.   

    Winsock1.State 肯定不是处于closed状态,否则不会出那样的错误Form_Unload里有closed有只是在程序结束起作用啊,平时呢?
      

  6.   

    因为你的服务端并没有关闭你的连接,你在客户端关闭时要再先Client.send "quit" 再Client.close
    服务端收到"quit"后Server.close
                Server.listen
    具体代码如下Client断开连接后再与Server连接就连接不上,必须退出应用重新进入才能连
    接, 解决是不要在 Client 端使用 Close 方法, 而在服务端使用。服务端的数据接受过程:
    Sub Server_DataArrival(ByVal bytesTotal as Long)
       Dim vbStr as String
       Server.GetData DataReceived, vbStr
       if Cstr(DataReceived)= "QUIT" then
         server.close
         server.LocalPort = 1111
         server.Listen
       end if
    。。
    End Sub客户端关闭时:
      Client.SendData "QUIT"
      

  7.   

    我刚写好的东西就是在客户端close,服务器方面仅仅是简单的响应close事件而close。运行正常得很。
      

  8.   

    一般来说,应该这么做:窗体上放置WinSock控件数组,其中0作为Listen,每次发现有客户机要求连接,就Load WinSock(i)与之连接,收到客户端的Close就关闭。这里有个问题,服务器端WinSock.close并不能真正断开,应该如下:
    WinSock.close后
    先Unload winsock(i)
    再load winsock(i)
      

  9.   

    使用飘零风的方法简单的加上listen就可以了,谢谢tuyueje的热心帮助另外,要想两个客户端同时使用的话就要用到小豹的数组方法了