谁能教我下  多客户端连接服务器     服务器WINSOCK    用控件实例  LOAD      怎么样和多客户端保持连接啊     我试了N次  都不行    代码是怎么样的?  我估计是我Private Sub lianjie_ConnectionRequest  事件里的问题

解决方案 »

  1.   

    接受多个连接请求
    上面设计的基本服务器只能接受一个连接请求。通过创建控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后在新的实例上调用 Accept 方法。下面的代码假定名为 sckServer 的窗体上有一个 Winsock 控件,它的 Index 属性被设置为 0;因此控件是控件数组的一部分。在声明部分,声明了一个模块级的变量 intMax。在窗体的 Load 事件中,intMax 被设置为 0,数组中第一个控件的 LocalPort 属性被设置为 1001。然后调用控件的 Listen 方法,使之成为“监听”控件。在连接请求到达时,代码将检测 Index 是否为 0(“监听”控件的值)。如果为 0,监听控件将增加 intMax 的值,并使用该号码来创建新的控件实例。然后,使用新的控件实例接受连接请求。Private intMax As LongPrivate Sub Form_Load()
       intMax = 0
       sckServer(0).LocalPort = 1001
       sckServer(0).Listen
    End SubPrivate Sub sckServer_ConnectionRequest _
    (Index As Integer, ByVal requestID As Long)
       If Index = 0 Then
          intMax = intMax + 1
          Load sckServer(intMax)
          sckServer(intMax).LocalPort = 0
          sckServer(intMax).Accept requestID
          Load txtData(intMax)
       End If
    End Sub
      

  2.   

    If Index = 0 Then
          intMax = intMax + 1
          Load sckServer(intMax)
          sckServer(intMax).LocalPort = 0
          sckServer(intMax).Accept requestID
          Load txtData(intMax)
       End If似乎 只能接受1个连接啊   第一次连接intmax=0  所以执行 第二次 INTMAX=1了  那IF里不是不执行了么?
      

  3.   

    没错的,你看清楚点
    sckServer(intMax).Accept已经Accept了,所以侦听的还是sckServer(0)
    其实你何必这样呢,直接搞个sckListen出来不好么?Private intMax As LongPrivate Sub Form_Load()
    intMax = 0
    sckListen.LocalPort = 1001
    sckListen.Listen
    End SubPrivate Sub sckListen_ConnectionRequest(ByVal requestID As Long)
    If Index = 0 Then
    intMax = intMax + 1
    Load sckServer(intMax)
    sckServer(intMax).LocalPort = 0
    sckServer(intMax).Accept requestID
    Load txtData(intMax)
    End If
    End Sub