如题,我的程序是首先用winsock监听固定个端口,然后得知用户端连接到该端口发送数据给用户端,但是现在碰到个问题,因为用户很多,如有100个,如果用winsock一个端口处理通常会处理不过来!我想知道如果用控件数组来解决这问题要怎么做!!!!另外再关闭此控件数组要怎样做?

解决方案 »

  1.   

    放一个Winsock控件,设置它的Index为0当有新连接来的时候,通过Load Winsock(i)添加当连接断开,再Unload断开那个控件
      

  2.   

    最好建一个集合和winsock(x)对应,rev的数据也放到集合里,再定时循环处理数据。
      

  3.   

    我就是不太熟悉winsock,有谁能帮我写段现成的
    请求连接,然后是多个用户请求的话则多开winsock处理,关闭连接时卸载控件数组的代码,
    还有个问题就是,如果这样处理是不是都在同个通道里接收消息和发送消息!
      

  4.   

    Option Explicit'//在窗体上放两个 winsock 控件,一个命名为 wskListen,另一个命名为 wskData,并设置第二个sock控件的Index属性为0Dim bBusySocks(100)    As BooleanPrivate Sub Form_Load()
        '//监听...
        wskListen.LocalPort = 9999
        wskListen.Listen
    End SubPrivate Sub wskListen_ConnectionRequest(ByVal requestID As Long)
        Dim i   As Long
        For i = 1 To 100
            If bBusySocks(i) = False Then
                '//加载新sock
                Load wskData(i)
                wskData(i).LocalPort = 0
                wskData(i).Accept requestID
                '//做标记
                bBusySocks(i) = True
                Exit For
            End If
        Next
        
        If i = 101 Then MsgBox "用户连接已经到达上限"
    End SubPrivate Sub wskData_DataArrival(Index As Integer, ByVal bytesTotal As Long)
        '//这里是处理接收数据的过程
        '//..........
        '//..........
    End SubPrivate Sub wskData_Close(Index As Integer)
        '//关闭sock
        Unload wskData(Index)
        bBusySocks(Index) = False
    End Sub
      

  5.   

    If bBusySocks(i) = False Then
                '//加载新sock
                Load wskData(i)
                wskData(i).LocalPort = 0
                wskData(i).Accept requestID
                '//做标记
                bBusySocks(i) = True
                Exit For
            End If
        NextbBusySocks(i)不懂这个的意思!!!!
      

  6.   

    vb的Winsock控件有内存泄露的BUG
    所有不要Load/Unload , 最好在启动时一次创建所有的Winsockcome here:
    http://support.microsoft.com/default.aspx?scid=kb;en-us;171843
    但我至今不知道在SP6里头修正了没有