科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道VB网络编程中Winsock的使用

VB网络编程中Winsock的使用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

   如同上面的内容所描述的,不论您使用UDP协议或是TCP协议,Winsock控件都可以允许与远程的设备连接,并且在相互之间交换数据。因此,依据上面的面熟而言,不论您使用的是哪一种协议都可以扮演主机端和客户端的角色。 同时。

作者:中国IT实验室 来源:中国IT实验室 2007年10月2日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  

 

♣frmclient窗体的设计内容

窗体的配置内容如图3-2

♣程序的代码

private sub form_load()

‘指定远程主机的ip地址。如果是localhost,代表的ip地址为127.0.0.1,并且也代表本机。

Tcpclient.RemoteHost=”localhost”

‘设置本机连接端口的localport属性的内容

‘请注意!必须是整体值

tcpclient.remoteport=2000

‘设置窗体的标题内容

Me.Caption=”frmclient”

Label1.caption=”传送的文字”

Label2.caption=”接收的文字”

Cmdconnect.caption=”与主机连接”

End sub

Private sub cmdconnect_click()

‘调用tcpclient控件的connect方法,来初始化与主机的连接请求

tcpclient.connect

end sub

private sub txtsend_change()

‘当txtsend控件的内容发生变化时,立即调用tcpclient控件的senddata方法,将txtsend控件的内容传送给主机

tcpclient.senddata txtsend.text

end sub

private sub tcpclient_dataarrival(byval bytestotal as long)

‘说明即将接收的数据类型

dim strdata as string

‘调用tcpclient控件的getdata方法,将接收的数据以vbstring数据类型存放strdata变量之中。

Tcpclient.getdata strdata,vbstring

‘将strdata变量的内容,存放在txtoutput控件之中。

Txtreceive.text=strdata

End sub

♣程序的执行结果

3-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”

4.UDP连接的基础

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

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

4-1UDP的连接范例

在此只做简单的介绍

♣窗体frm PeerA的设计内容

如图4-1所示

♣窗体的程序代码

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的设计内容

如图4-2所示

♣窗体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

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件