VB.NET中Winsock控件的使用详解(二)

作者:互联网   出处:控件中国网   2014-11-05 19:18:35   阅读:1

1)、如何允许更多客户端同时连接

  当您的应用程序架构是属于主从式架构时,一般来说,客户端应该不止一个而已。但是,如果每一个客户端使用的一组连接端口时,那么如果有100个客户端呢?如果有1000个客户端呢?那么究竟要增加多少个winsock控件呢?同时,也得要分成 100(或是1000)组accept子程序,接着每一部客户端都必须记得固定的连接端口号。

  其实,您大可不必如此辛苦。您可以利用Visable Basic控件数组的方式并利用监听用的数组元素(一般都是索引值“0”),来触发ConnectRequest事件。接下来再利用判别控件数组元素的连接状态来进行远程客户端连接。以下的程序代码范例,就是如何让许多远程用户连接到同一个连接端口号的程序代码的模板:


   private connmax as long
  private sub form_load ()
  dim I as integer
  connmax =200
  sckserver(0).localport=1001
  sckserver(0).listen
  for I =1 to connmax
  load sckserver(i)
  next
  end sub
  private sub sckserver_connectionrequest(index as integer,byval requestid as long)
  dim I as intege
  for I =1 to connmax
  if sckserver(1).state=sckclosed then
  sckserver(I).accept requestid
  end if
  end if
  end sub


  在上述的程序范例中,将会建立一个具有“201”个元素的sckserver控件数组。接着,利用for。。。next循环的方式,来设置加载sckserver控件数组元素或是判断数组元素是否正在连接中进而允许客户端连接。至于sckserver控件数组总元素为“201”的原因在于——“connmax设置为200再加上sckserver(0),因此总元素数量为201”。

  四、UDP连接的基础

  在建立UDP的应用程序时,其过程会比TCP协议简单许多。这是由于UDP协议在数据传送之前,可以不需要特别明确的连接方式。但是,在上述的TCP连接方式之中,Winsocke控件必须设置在“监听(Linsten)”状态之下,同时在客户端准备与主机进行连接时,主机端也必须要使用Accept方法来允许客户端所要求的连接。

  反观在UDP协议方面,双方仅仅需要使用Bind方法,即可与对方连接并且传输数九,因此,UDP协议连接过程的处理方式确实比TCP简单许多。下面介绍使用UDP协议来传送信息的过程。

  1、UDP的连接范例

  在此只做简单的介绍

  窗体frm PeerA的设计内容

  如图下图所示

  

  窗体的程序代码

     Private Sub Form_Load()
  ′控件的名字为udpPeerA
  With udpPeerA′重点:必须将 RemoteHost 的值修改为对方计算机的名字。
  RemoteHost= ″PeerB″
  RemotePort = 1001 ′连接的端口号。
  Bind 1002 ′绑定到本地的端口。
  End With
  frmPeerB.Show′显示第二个窗体。
  End Sub
  Private Sub txtSend_Change()
  ′在键入文本时,立即将其发送出去。
  udpPeerA.SendData txtSend.Text
  End Sub
  Private Sub udpPeerA_DataArrival (ByVal bytesTotal As Long)
  Dim strData As String
  udpPeerA.GetData strData
  txtOutput.Text = strData
  End Sub

  窗体frmpeerB的设计内容

  如下图所示

  

  窗体frmpeerB的程序代码


      Private Sub Form_Load()
  ′控件的名字为 udpPeerB。
  With udpPeerB
  ′重点:必须将RemoteHost的值改为对方计算机的名字。
  RemoteHost= ″PeerA″
  RemotePort = 1002 ′要连接的端口。
  Bind 1001 ′绑定到本地的端口上。
  End With
  End Sub
  Private Sub txtSend_Change()
  ′在键入后立即发送文本。
  udpPeerB.SendData txtSend.Text
  End Sub
  Private Sub udpPeerB_DataArrival (ByVal bytesTotal As Long)
  Dim strData As String
  udpPeerB.GetData strData
  txtOutput.Text = strData
  End Sub

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat