收藏本站
网站导航
联系方式
网站首页 | 杂志简介 | 论文欣赏 | 在线订阅 | 征稿启事 | 投稿须知 | 资讯速递 | 写作指南
本刊信息

主管:广西国有资产监督管理委员会
主办:广西轻工业科学技术研究院
协办:广西轻工协会
      广西酿酒协会
编辑/出版:《广西轻工业》编辑部
编委会主任:罗左青
编委会副主任:程劲芝 梁智
编委:白树雄 宋  苹 蒋敬全
      谢晓航 雷光鸿 贤章胜
主编:贤章胜
地址:广西南宁经济技术开发区
      迎凯路8号
邮编:530031
编辑部:0771-4518435
        4518909转8968
投稿信箱:qgkj@vip.126.com
网址:www.qgkjlw.com
国际标准刊号:ISSN2095—3518
国内统一刊号:CN45—1385/TS
订阅:全国各地邮局
邮发代号: 48—123
定价:人民币15元
刊期:月刊

理事单位

广西粮油科学研究所
广西大学轻工与食品工程学院
广西大学生命科学与技术学院
广西农垦糖业集团金光制糖有限公司
广西农垦糖业集团昌菱制糖有限公司
广西机械工业研究院
重庆啤酒集团柳州啤酒有限责任公司
南宁吉然节能环保技术有限公司
柳州柳连机械制造有限责任公司
南京润维热工设备有限公司
广西柳州市嘉诚汽车饰件系统有限公司
广西柳江县柳兴榨辊有限责任公司
广西南宁丰烁电力设备节能有限公司
广西都安密洛陀野生葡萄酒有限公司
广西巴马神酒业有限责任公司
广西中天领御酒业有限公司
广西北海市合浦东园家酒厂
桂林理工大学管理学院
广西工业职业技术学院   
广西农业职业技术学院
广西二轻工业技工学校
广西德保县酒厂
广西全州湘山酒厂
田阳南华纸业有限公司
广西桂平乳泉液酒业有限公司

 
首页>> 论文欣赏 >> 计算机科学与信息技术>> 正 文
 

基于VB的Winsock 控件实现网络通信

2010年第1期(总第134期)
王颖丽(绵阳职业技术学院计算机科学系,四川 绵阳 621000)
 
  【摘 要】 简要介绍了在Visual Basic中利用WinSock控件,通过TCP协议与远程计算机建立连接的使用方法。阐述了设计步骤,以及在VB中具体实现的过程,并给出了详细的代码。
  【关键词】 WinSock控件;VB
 
1 引言
  随着计算机科学技术和网络通讯技术的发展,计算机通信使用得越来越广泛。而基于WinSock控件的计算机通信是比较成熟的解决方法,许多程序语言都支持基于WinSock 的计算机网络编程。Visual Basic(以下简称为VB)提供的WinSock网络编程接口,可以方便实现网络编程。在此,本文主要讨论WinSock通信基础以及通过VB中的WinSock控件实现基本的计算机通信。
1.1  利用VB中的WinSock控件来实现客户/服务器模式的双向数据交换。
  客户机/服务器(Client/Server)模式是目前广泛使用的一种网络工作模式。在TCP/IP网络应用中,通信的主要模式就是客户机/服务器模式,即客户端向服务器发出请求,服务器接收到请求后提供相应的服务。客户机/服务器模式在操作过程中采取的是主动在服务器,服务器先启动,等待客户请求到达服务端口。接收到重复服务请求时,处理该请求并发送应答信号。接收并发服务请求,需要激活一个新进程来处理这个客户请求,并不需要对其他请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。返回等待另外的客户请求。最后关闭服务器。在客户机方,打开一通信通道,并连接到服务器所在的主机的特定端口。向服务器发出服务请求报文,等待并接收应答,继续提出请求。请求结束后关闭通信通道并终止。
  远程控制功能是基于客户机/服务器这一模型来实现的,所以程序的编制也应分两部分进行:一部分是服务器端也就是被控制的一方,另一部分是客户端就是控制方。服务器程序要守候在一个固定或不固定的网址(IP)上等待客户程序的请求;客户程序则向服务器程序所在的网址请求连接,连接成功后通过交换信息即可得到相应的服务。因此设置Winsock属性时,服务器端应设置LocalPort和应用Listen方法进行监听,客户程序则要设置RemoteHost和RemotePort及应用Connect方法请求连接,并用Senddata方法互换信息。下面简介客户机/服务器(C/S)连接的实现方法。
  (1)建立连接
  创建服务器应用程序,就应设置一个收听端口(Localport属性)并调用Listen方法。当客户机需要连接时就会发生ConnectionRequest事件。为了完成连接可调用该事件内的Accept方法。
  (2)数据发送
  建立连接后,任何一方都可以收发数据。发送数据,可调用Senddata方法当接收数据时会触发Dataarrival,调用DataArrival事件内的Getdata方法就可获取数据。
  (3)数据传输
  为了传输数据,首先要设置客户机的Localport属性。然后,服务器端只需将Remotehost设置为客户端的Internet地址,并将Remoteport属性设置为与客户端的Localport属性相同的端口号,并调用Senddata方法来发送信息。于是客户机使用DataArrival事件内Getdata方法来获取已发送的信息。
 
2 与远程计算机建立连接
  利用WinSock控件可以与远程计算机建立连接,并通过传输控制协议(TCP)进行数据交换。TCP协议控件是基于连接的协议,在开始数据传输之前,用户必须先建立连接。在收发数据的时候,应用程序是如果需要得到客户端或者服务器的确认信息,在收发数据之前就要先建立明确的连接。在连接建立之后,TCP协议将维护连接并确保数据的完整性。
2.1  协议的设置
  在设计时,可以按如下方式设置应用程序使用的协议:在“属性”窗口中单击“协议”,然后选择sckTCPProtocol。也可以使用程序代码来设置Protocol属性,如下所示:
Winsock1.Protocol = sckTCPProtocol
2.2  确定计算机的名称
  在与远程计算机相连接的时候,需要知道它的 IP 地址或者它的计算机名。计算机名称可以作为RemoteHost属性的值。
2.3  TCP连接初步
  应用程序要使用TCP协议,首先必须决定应用程序是服务器还是客户端。如果要创建一个服务器端,那么应用程序需要“监听”指定的端口。当客户端提出连接请求时,服务器端能够接受请求并建立连接。在连接建立之后,客户端与服务器端可以自由地互相通讯。
 
3 在VB中具体实现
3.1  WinSock控件的相关属性,方法和事件
3.1.1  WinSock 控件常用属性
  (1)LocalHostName :本地机器名;(2)LocalIP:本地机器IP地址;(3)LocalPort :本地机器通信程序的端口(0<端口<65536);(4)RemoteHost:远程机器名;(5)RemotePort :远程机器的通信程序端口;(6)state :连接的当前状态;(7)Protocal :使用TCP或UDP协议(这里们选‘0-sckTCPProtocal’)。
3.1.2  WinSock控件常用方法
  (1)Listen:用于服务器程序,等待客户访问;(2)Connect:用于向远程主机发出连接请求;(3)Accept:用于接受一个连接请求;(4)Senddata:用于发送数据;(5)Getdata:用来取得接收到的数据;(6)Close:关闭当前连接。
3.1.3  WinSock控件常用事件
  (1)Close:远程机器关闭连接时触发;(2)Connect:连接建立好,可以进行通信时触发(客户端);(3)ConnectRequest:有请求连接到达时产生(服务器端);(4)DataArrival:有数据到达时触发;(5)Error:发生错误时发生;(6)SendProgress :数据传送进度。
3.2  创建接受一个连接请求的服务器的步骤:
  (1)启动Visual Basic。创建一个新的工程文件。
  (2)在窗体中放入一个 Winsock控件:选择菜单“工程”|部件,在部件对话框中选中“Microsoft Winsock Control 6.0”。它的名字默认为winsock1。与Timer控件类似,WinSock控件在运行时是不可见的。在窗体上添加两个TextBox控件。将第一个名为text1,第二个为text2。将窗体的标题改为“TCP服务器”。
  (3)为窗体添加如下的代码
Private Sub Form_Load()
Winsock1.LocalPort = 1001  '将winsock1的LocalPort属性设置为一个整数
Winsock1.Listen           '调用Listen方法
Form2.Show               '显示客户端的窗体
End Sub
 
Private Sub Text1_Change()
Winsock1.SendData Text1.Text  ‘使用 SendData 方法,发送text1中的字符。
End Sub
 
Private Sub Winsock1_ConnectionRequest (ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
'检查State属性是否为关闭的,如果不是,在接受新的连接之前先关闭此连接。
Winsock1.Accept requestID    '接受requestID 参数的连接
End Sub
 
Private Sub Winsock1_DataArrival (ByVal bytesTotal As Long)
Dim str As String
Winsock1.GetData str          '调用GetData方法
Text2.Text = str               '接收到的字符显示在文本框text2中
End Sub
3.3  创建接受多个连接请求的服务器的步骤:
  上面设计的基本服务器只能接受一个连接请求。通过创建控件数组,就可以同时接受多个连接请求。将Winsock 控件定义成一个控件数组,它的Index属性被设置为0。在声明部分,声明了一个模块级的变量n。在窗体的Load事件中,n被设置为0,数组中第一个控件的LocalPort属性被设置为1001,然后调用控件的Listen方法,使之成为“监听”控件。在连接请求到达时,代码将检测Index是否为0(“监听”控件的值)。如果为0,监听控件将增加n的值,并使用该号码来创建新的控件元素。然后,使用新的控件元素接受连接请求。
Private n As Long
Private Sub Form_Load()
n=0
Winsock1(0).LocalPort=1001
Winsock1(0).Listen
End Sub
 
Private Sub Winsock1_ConnectionRequest  (Index As Integer,ByVal requestID As Long)
If Index=0 Then
n=n+1
Load Winsock1(n)
Winsock1 (n).LocalPort = 0
Winsock1(n).Accept requestID
Load  Text1(n)
End If
End Sub
3.4  创建一个客户端的应用程序的步骤
  (1)在工程中添加一个新的窗体,将窗体的标题改为“TCP客户机”。在窗体中添加一个 Winsock控件,并将其命名为Winsock1。在窗体中添加两个TextBox控件。将第一个命名为Text1,第二个为Text2。在窗体上放一个CommandButton 控件,并将其命名为Command1。将CommandButton控件的标题改为连接。
  (2)为窗体添加如下的代码
Private Sub Form_Load()
Winsock1.RemoteHost=“计算机名字”
Winsock1.RemotePort=1001
End Sub
Private  Sub  Command1_Click()
Winsock1.Connect   '调用Connect方法,初始化连接。
End Sub
 
Private Sub Text1_Change()
Winsock1.SendData  Text1.Text
End Sub
 
Private Sub Winsock1_DataArrival_(ByVal bytesTotal As Long)
Dim  str1  As String
Winsock1.GetData  str1
Text2.Text=str1
End Sub
  我们已经创建了一个简单的客户/服务器模式的应用程序。运行工程,然后单击“连接”。在两个窗体之一的Text1文本框中键入文本,可以看到同样的文字将出现在另一个窗体的Text2文本框中。
 
4 结束语
  本文探讨了Visual Basic中WinSock控件的相关属性,方法和事件以及利用VB中的Winsock控件来实现客户/服务器模式的双向数据交换的方法。在VB在创建接受一个连接请求的服务器和一个客户端的应用程序的步骤及相应的代码。在Visual Basic 6.0环境下运行通过。
 
参考文献
[1]微软中国有限公司译.Microsoft Corporation. 中文Visual Basic 6.0程序员指南[M].北京:科学出版社,1998.
[2]黄淼云.VB 6.0办公自动化编程[M].北京:国防工业出版社,2000.
 
王颖丽(1969-),女,山东,讲师,工程硕士,主研究方向:数字图像处理技术及应用、计算机应用。
   
关于我们 | 版权声明 | 广告服务 | 网站地图 | 联系方式
Copyright© 2005 QGKJLW.COM All Rights Reserved. 版权所有.《轻工科技》编辑部
工作QQ:373180636 投稿信箱:qgkj@vip.126.com 咨询电话:0771-4518435 4518909转8968
通讯地址: 广西南宁经济技术开发区迎凯路8号《轻工科技》编辑部 邮编:530031