知识大全 VB网络编程中Winsock的使用

Posted

篇首语:我们不会把常识僵化并使它变成信条。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 VB网络编程中Winsock的使用相关的知识,希望对你有一定的参考价值。

VB网络编程中Winsock的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

  同时 当您在使用Winsock控件的过程中 这个控件不会显示在正在执行的窗体之中 换句话说 Winsock控件是在后台运行的一种控件 在执行过程之中 不会具有任何选用 可见的控件 那么该如何使用Winsock控件呢?它可以被应用在那些类型的应用程序之中呢?以下所列出的内容 是这个控件可以应用的大致范围

  &# ;将客户端所收集的数据 传送给主机端

  &# ;点对点的文件传送

  &# ;聊天室应用程序

  &# ;电子公告栏

  &# ;voip(voice over TCP/ip)

  因此 当您希望建立上述类型的应用程序之前 必须要学习如何选用适合的协议类型

   如何选用适用的协议

  当您准备开始使用Winsock控件之前 首要的工作是如何选择适用的协议类型 如同先前所述的 您可以选择TCP 协议或是UDP协议中的一种 但是这两种协议的差异点在哪里呢?虽然 它们同样可以使用在Internet或是Internet环境之中 但是主要的差异在于连接的状态 以下是这两种协议的特点说明

  &# ;TCP协议是属于面向连接的协议 所谓的面向连接协议是指—— 在您可以交换数据之前 在两个终端设备之间必须连接成功 同时 在网络的基础理论之中 都会特别强调TCP具有错误核对的功能 也就是说 在数据的传送过程中 如果发生错误或是数据无法传达对方时 TCP协议将会重复尝试着重新传送数据 因此 核对以及重新传送的能力 因此起传输效率会比Internet协议或是巨域网络协议差一些(netBIEUI IPX AppleTalk)

  &# ;UDP协议是属于无面向连接协议 这种协议为适用在两个设备之间 适用于信息传送以及数据的传输方面 但是在使用时 必须注意当你将信息送出时 对方可能已经离线 因而无法接收到数据 而您也无法实时察觉到对方已经离线 此外 使用UDP协议的最大数据传送量 完全取决于网络的传输量 因此 此种协议较为适用于局域网络

  因此 当您在建立应用程序并且选用适当的协议之前 务必先依据应用程序使用的环境来选择适用的协议

   设置协议

  当已经选择好适当的协议之后 接下来 将必须要设置协议的类型 在Visable Basic之中 共有两种设置协议的方式 修改属性窗口 以及 程序代码设置 以下是这两种设置方式的说明 &# ;修改属性窗口(见图 )

  

>

  &# ;程序代码设置

  Winsock Protocol=sckTCPProtocol

   .TCP连接的基础

  在使用TCP协议来建立应用程序的过程中 首先必须决定应用程序是属于主机端

  是客户端来决定应用程序所扮演的角色问题 因此 在建立应用程序的过程中 如果您选择 主机端 时 主机端的Winsock控件必须将特定的连接端口号设置在监听模式之中 同时 在客户端提出连接的请求时 主机端可以允许客户端的连接请求 并且完成连接的程序

  因此 一旦主机端与客户端连接成功之后 在这个部设备之间即可开始传送数据 以下的程序代码 具有TCP连接的基本聊天室功能

   TCP连接范例

  在此笔者只做简单的 程序介绍

  &# ;frmserver窗体的设计内容

  如图 所示

  

>

  &# ;frmserver的程序代码

  private sub form_load()

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

   请注意!必须是整体值

  tcpserver LocalPort=

   将本机连接端口设置为监听模式

  tcpserver Listen

  Me Caption= frmsever

  Label Caption= 传送的文字

  Label Caption= 接收的文字

   打开frmclient窗体

  frmClient Show

  end sub

  private sub tcpserver_connectionrequest(byval requestid as long)

   如果tcpserver 控件的状态目前不是处于关

   闭的状态时 在允许远程设备连接时 必须要关闭目前的控制的运行

  if tcpserver state<>sckclosed then tcpserver close

   允许远程设备使用必要的识别码(requestid)与主机进行连接

  tcpserver accept requestid

  end sub

  private sub txtsend_change()

   当txtsend控件的内容发生变化时 将txtsend控件的内容 通过tcpserver控件senddata方

   法 将txtsend控件的内容传送给frmclient

  tcpserver senddata txtsend text

  end sub

  private sub tcpserver_dataarrival(byval bytestotal as long)

   声明即将接收的数据类型

  dim strdata as string

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

  Tcpserver getdata strdata vbstring

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

  Txtreceive text =strdata

  End sud

  &# ;frmclient窗体的设计内容

  窗体的配置内容如图

  

>

  &# ;程序的代码

  private sub form_load()

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

  Tcpclient RemoteHost= localhost

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

   请注意!必须是整体值

  tcpclient remoteport=

   设置窗体的标题内容

  Me Caption= frmclient

  Label caption= 传送的文字

  Label caption= 接收的文字

  Cmdconnect caption= 与主机连接

  End sub

  Private sub cmdconnect_click()

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

  nnect

  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

  &# ;程序的执行结果

  

>

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

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

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

  private connmax as long

  private sub form_load ()

  dim I as integer

  connmax =

  sckserver( ) localport=

  sckserver( ) listen

  for I = 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 = to connmax

  if sckserver( ) state=sckclosed then

  sckserver(I) accept requestid

  end if

  end if

  end sub

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

   .UDP连接的基础

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

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

   UDP的连接范例

  在此只做简单的介绍

  &# ;窗体frm PeerA的设计内容

  如图 所示

  

>

  &# ;窗体的程序代码

  Private Sub Form_Load()

  ′控件的名字为udpPeerA

  With udpPeerA′重点:必须将 RemoteHost 的值修改为对方计算机的名字

  RemoteHost= ″PeerB″

  RemotePort = ′连接的端口号

  Bind ′绑定到本地的端口

  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 = ′要连接的端口

  Bind ′绑定到本地的端口上

  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

cha138/Article/program/net/201311/12396

相关参考

知识大全 VB.NET编程中调用Windows API

VB.NET编程中调用WindowsAPI  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Windo

知识大全 在PB中使用WINSOCK控件[2]

在PB中使用WINSOCK控件[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  winsoc

知识大全 在PB中使用WINSOCK控件[1]

在PB中使用WINSOCK控件[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在WINDO

知识大全 vb编程,输入十个数字,找出最大值,并找出最大值的位置。

vb编程,输入十个数字,找出最大值,并找出最大值的位置。,vb编写程序,从键盘中输入10个整数,找出其中的最大值以及最大值所在的位置PrivateTypenumxuhaoAsIntegeriAsInt

知识大全 vb.net实现sqlite数据库编程示例

   在项目开发中充分体会到了一个精简数据存储模块的重要性及实用性在综合了三年开发经验的基础上向各位推介一下sqlite数据库希望更多的程序猿支持开源精神 &n

知识大全 VB.NET 拖动无边框窗体编程实例

VB.NET拖动无边框窗体编程实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    Impor

知识大全 VB.NET的Object Oriented编程内功心法

VB.NET的ObjectOriented编程内功心法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 VB.Net编程实现Web Service的基础

VB.Net编程实现WebService的基础  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  W

知识大全 VB.Net编程入门之Hello World(1)

VB.Net编程入门之HelloWorld(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 VB.Net编程入门之Hello World(2)

VB.Net编程入门之HelloWorld(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!