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
   End If
End Sub
这是别人的一段代码,目的是使服务端可以接受多个连接,我有几点疑惑
1、加入增加了新的sckServer控件,为什么上面代码中没有用该控件的listen方法?不用的话不是不能监听端口吗?也就是不能建立连接啊
2、一个服务端的winsock控件如果已经和客户端建立了连接,那么是不是不能再接受另外其他的客户的连接请求?除非把他关闭?
没分了 啊

解决方案 »

  1.   

    注意到Accept方法没.这个方法是将新来的连接使用另一个WINSOCK控件去应答.所以只需要有一个控件进行监听,然后不断地把请求发送给别的控件进行应答就行了.就像一个前台MM:)
      

  2.   

    尝试做了一个利用WINSOCK控件的自动分包发送机制的东东(VB6.0)这个代码也是这种结构的,多连接,可以参考一下.
      

  3.   


    可是在一对一连接时,在服务器的ConnectionRequest事件中,要先关闭winsock,然后accept,这样的话那么端口以及close,就不能listen了吗?
      

  4.   

    那个原因是因为accept的控件需要是关闭状态的控件.如果不关闭就无法进行应答.一对一的话只能如此.
      

  5.   

    而且,既然是一对一,那CLOSSE了又没啥问题,反正是一对一.而如果是一对多,又不可能让用于LISTEN的控件去应答,所以根本就不冲突,你的问题从何而来?