问题:
     1,客户端和服务器端在本地机器上调试的时候连接的成功率很低也就是10%吧不知道为什么,IP和端口号都没错误!
     2,客户端在发出连接请求以后,未得到服务器端响应,我在请求连接时(没有推出),为什么出现,"不能在这个状态下连接"的错误,应该怎么解决,多次连接请求!
     兄弟们帮忙,谢谢了!

解决方案 »

  1.   

    这是服务器端:
    Option Explicit
    Private Sub Form_Load()
    Winsock1.Listen
    Label2.Caption = "": Label4.Caption = "": Label6.Caption = ""
    End Sub
    Private Sub Winsock1_Close()
    Winsock1.Close
    Label2.Caption = "": Label4.Caption = Winsock1.State & "连接关闭": Label6.Caption = ""
    Winsock1.Listen
    End SubPrivate Sub Winsock1_Connect()
    Label4.Caption = "已经建立连接"
    End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    If Winsock1.State <> sckClosed Then Winsock1.Close
    Winsock1.Accept requestID
    Label6.Caption = requestID
    Label2.Caption = Winsock1.RemotePort
    Label4.Caption = Winsock1.State & "正在建立连接"
    End Sub
      

  2.   

    这是客户端
    Option Explicit
    Private Sub Command1_Click()
    Winsock1.Connect
    Label2.Caption = Winsock1.RemoteHost
    Label4.Caption = Winsock1.State & "正在请求连接"
    End Sub
    Private Sub Command2_Click()
    Winsock1.Close
    End SubPrivate Sub Winsock1_Close()
    Label4.Caption = Winsock1.State & "关闭连接"
    Label2.Caption = ""
    End SubPrivate Sub Winsock1_Connect()
    Label2.Caption = "连接到" & Winsock1.RemoteHostIP
    Label4.Caption = Winsock1.State & "已经连接"
    End Sub
      

  3.   

    服务器要采用控件苏组的,而且要有专门的监听控件,这样才能提高成功率到%100
    再就是你是tcp 协议把。我给你写主要的2个事件
    Private intMax As LongPrivate Sub Form_Load()
    intMax = 0Winsock1(0).LocalPort = 1080
    Winsock1(0).ListenEnd Sub
     Private Sub Winsock1_ConnectionRequest(index As Integer, ByVal requestID As Long)
    If index = 0 Then     intMax = intMax + 1     Load Winsock1(intMax)     Winsock1(intMax).LocalPort = 0     Winsock1(intMax).Accept requestID
         
         
         
    End IfEnd Sub
    Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)
    On Error Resume Next
    Dim clientDat As String
    Winsock1(index).GetData clientDat, vbStringMsgBox clientDat
    End Sub
      

  4.   

    努力吃饭中:
    我使用的是tcp协议!我现在不是想实现多端连接,我现在只是想实现一个客户一个服务器,但是这样也出现了10%的连接成功率,甚至还要低,端口我都在设计时在属性里输入了!
    谢谢了!
      

  5.   

    可以这么说,就是多个端口也要配合多个socket也就是说有多少个断口就要有多少个socket
      

  6.   

    同意  zyg0(影子(努力吃饭中)) 楼主的代码 只能同时建立一个连接
      

  7.   

    楼上的谢谢了!
    但是这只解决了一个问题,另一个问题还没有解决,就是:我在机器上运行的时候,第一次启动就有90%的时候不能建立连接,有时候甚至是100%,而且我的代码几乎都是一样的!如果成功建立了连接,我关闭以后,在连接,那成功率就是100%了,我在服务器和客户端都使用了close方法来关闭了连接!连接代码,关闭代码和书上实例几乎是一样,可是连接失败率太高了!不知道为什么!
    请帮兄弟解决一下!
      

  8.   

    执行。.connet方法是需要时间的,不能
    winsock.connet
    winsock.senddate
    这样永远不会成功,应该在事件里写
    Private Sub Form_Load()Winsock1.RemoteHost = "192.168.27.104" '服务器ip
    Winsock1.RemotePort = "1080" '服务器端口
    Winsock1.LocalPort = 0
    Winsock1.Connect '连接服务器End SubPrivate Sub Winsock1_Connect() 'Winsock1.Connect 触发
    Dim aa As String
    On Error GoTo errend
    aa = "ok"
    Winsock1.SendData "0" & aa
    Exit Sub
    errend:
    MsgBox "连接发生错误!数据发送失败!", vbOKOnly + vbExclamation, "TCP 错误信息"
    End Sub