1、使用 Visual Basic Winsock 控件编写网络通信程序摘要:本文讨论用 Visual Basic Winsock 控件实现局域网通信的方法,并通过实例进行了简要的说明,为 Visual Basic 初学人员学习局域网通信程序设计提供一个入门的线索。 关键词:Visual Basic、网络通信程序设计、TCP/IP 协议 中途分类号:F224.33 文献标识码:A 文章编号: 1、前言: 对于 Visual Basic 初学人员来说,如果能自己编一个局域网通信程序,会给自己的工作带来一些帮助。但要从头开始完全由自己来编写一段用于通信的程序,必须对相关的网络协议及其他的一些较底层的技
2、术有较深入的了解。Visual BasicWinsock 控件已经替你封装了所有烦琐的技术细节。Winsock 是 Microsoft Windows 提供的网络编程接口,它提供了基于 TCP/IP(传输控制协议/网间协议)协议的接口实现方法。并提供了访问 TCP 和 UDP 网络服务的方便途径。 Winsock 控件可以供 Microsoft Acess、Visual Basic,Visual C+和 Visual Foxpro 的开发人员使用。本文以 Visual Basic 6 企业版为开发环境来向大家介绍一下 Winsock 控件的初步应用。 TCP/IP 协议提供两种同其他行机进行通
3、信的方式:TCP 方式和 UDP方式。 TCP 是一种面向连接的服务,在两个主机之间建立连接,提供双向、有序且无重复的数据流服务,以及流量控制、错误检测程纠错等服务,保证数据的可靠性。 UDP 是一种双向的无连接数据服务,它把数据发出去但并不进行差错控制和检查,所以不能保证数据的可靠性,因而一般只能用于少量数据的传输。 2、网络通信程序 在创建客户应用程序时,必须知道服务器计算机名或其 IP 地址(存于 RemoteHost 属性)、及服务器计算机进行侦听的端口(存于 RemotePort属性) ,然后调用 Connect 方法。 创建服务器应用程序时,就应相应设置一个侦听端口(LocalPo
4、rt 属性)并调用 listen 方法。当客户机需要连接时(connect),就会发生ConnectionRequest 事件。为了完成连接,你可以在 ConnectionRequest事件中调用 Accept 方法。建立连接后,任何一方计算机都可以发送、接收对方数据。如果你要发送数据,需调用 SendData 方法。当接收到数据时,会发生 DataArrival 事件,调用 DataArrival 事件中的 GetData 方法就可以获得对方传送的数据。 假设甲机为客户机、乙机为服务器。且其 IP 为 192.168.1.12,接收端口为 1024(任意选一个未被使用的端口即可)。 3、应用
5、程序的建立 建立服务器程序 创建标准工程。然后在工具箱上单击右键,在单出的菜单中选择“部件” ,在弹出的“部件”对话框中,钩选 “Microsoft Windows Control 6.0”复选框,的窗口标题属性设为“学校公告栏”把 Winsock控件拖到窗体上并设置属性:Name 为“srSocket” ;index 为“0” ,在窗体中添加一标签,Name 为“Label1” 其代码如下: Dim nSocket As Integer 申明变量 Dim Schedule(9) As String Private Sub Form_Load() InitSchedule 初始化数据 nSoc
6、ket = 0 srSocket(0).LocalPort = 1024 设置监听端口 srSocket(0).Listen Label1.Caption=“服务器已工作,准备接收请求” End Sub Private Sub srsocket_Close(Index As Integer) Label1.Caption=“客户终止对话!” srSocket(Index).Close End Sub Private Sub srsocket_ConnectionRequest(Index As Integer, ByVal requestID As Long) nSocket = nSocke
7、t + 1 Load srSocket(nSocket)有客户请求,产生一个 SOCKET 来和客户通信 srSocket(nSocket).Accept requestID Label1.Caption=“有客户请求,建立连接” End Sub Private Sub srsocket_DataArrival(Index As Integer, ByVal bytesTotal As Long) Dim Rec Dim NextOne As String Label1.Caption=“进行数据传输” srSocket(Index).GetData Rec取出数据 NextOne = get
8、Next() 发送数据 srSocket(Index).SendData NextOne End Sub Private Sub srsocket_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) If srSocket(Index).State 0 The
9、n srSocket(Index).Close 产生错误,则关闭连接 End If End Sub Public Function InitSchedule() Schedule(0) = “要公告的消息 1“ Schedule(1) = “要公告的消息 2“ Schedule(2) = “要公告的消息 3“ Schedule(3) = “要公告的消息 4“ End Function Public Function getNext() Static Counter As Integer getNext = Schedule(Counter)循环显示 4 条信息 Counter = Counte
10、r + 1 Counter = Counter Mod 4 End Function 建立客户机程序 创建标准工程。然后在工具箱上单击右键,在单出的菜单中选择“部件” ,在弹出的“部件”对话框中,钩选 “Microsoft Windows Control 6.0”复选框,的窗口标题属性设为“学校公告栏”把 Winsock控件拖到窗体上 Name 为“clSocket” ,在窗体中添加二个标签,Name 分别为“Label1”和“Label1” ,输入以下程序代码: Private Sub Form_Load() Form1.Caption=”客户端” Label1.caption=”学校公告栏
11、” ClSocket.RemoteHost = “192.168.1.12“ ClSocket.RemotePort = 1024 ClSocket.Connect End Sub Private Sub ClSocket_Close() ClSocket.Close 如果服务器关闭,则关闭连接 End Sub Private Sub ClSocket_Connect() ClSocket.SendData “inform Me“ 向服务器发出请求数据 End Sub Private Sub ClSocket_DataArrival(ByVal bytesTotal As Long) Dim
12、gResult As String ClSocket.GetData gResult 接收数据 DisplayAndRequestNext gResult调用显示程序段 End Sub Sub DisplayAndRequestNext(ByVal iStr As String) Dim i As Integer Dim sLen As Integer Dim sTmp1 As String Dim sTmp2 As String sLen = Len(iStr) sTmp1 = Space(sLen) sTmp2 = Space(sLen) sTmp1 = sTmp1 + iStr For
13、i = 1 To 2 * sLen + 1 在屏幕上移动显示 Label2.Caption = Mid$(sTmp1, i, sLen) delay 30000 Next i If ClSocket.State 0 Then ClSocket.SendData “next“接收下一条信息 Else Label2.Caption = “服务器已关闭“ End If End Sub Sub delay(dt As Integer) Dim i As Integer用循环来进行延时 For i = 0 To dt DoEvents Next i End Sub 到此完成了客户端和服务器的,将其存盘,然后编译成可执行文件。运行时先启动服务器程序,然后运行客户端程序。 参考文献 Visual Basic 6.0 入门与提高清华大学生出版社 张树兵 戴 红 陈 哲 编著
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。