VB中基于TCPIP协议的点对点文件传输.doc
《VB中基于TCPIP协议的点对点文件传输.doc》由会员分享,可在线阅读,更多相关《VB中基于TCPIP协议的点对点文件传输.doc(9页珍藏版)》请在三一办公上搜索。
1、VB中基于TCP/IP协议的点对点文件传输葛斌 摘 要 随着网络的普及,网络编程显得尤其重要。本文使用Winsock控件实现两台计算机间的文件传输,描述了Winsock控件的使用方法及有关文件传输的算法。 关键词 TCP/IP协议,Winsock控件,网络编程,文件传输,断点续传。 随着计算机网络的迅速发展,人们的生活越来越离不开网络,如今网络编程已成为计算机发展的热点,而在众多的网络通信中,又以TCP/IP协议最为流行。本文讨论的Winsock控件,提供了访问TCP/IP网络的捷径,使用它可以不必了解TCP/IP的细节和调用Winsock API,只要设置好相应的属性和触发事件后的处理,就可
2、以实现计算机之间的数据通信。一、Winsock控件 Winsock即Windows Sockets规范的简称,是目前最流行的网络通信应用程序接口之一。所谓Socket,通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。Winsock控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP两种:TCP协议适用于那些对于数据的可靠性要求比较高的情况,目前大多数的网络应用层协议都是基于TCP协
3、议的(例如常用的HTTP、FTP、SMTP、POP3等协议);UDP协议适用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量的(例如Real公司的RTSP协议,腾讯公司的QQ协议等)。二、Winsock控件通信的工作原理 Winsock控件是基于Socket规范创建的,所以其通信的实质是对Socket接口进行数据的读写操作。如果两个应用程序需要通信,它们可以通过使用Socket类来建立套接字连接,可以将这个过程想象为一次电话呼叫过程:呼叫者通过拨号与被呼叫者连接,当电话接通时,双方都可以自由通话了,只不过这里的呼叫者被称为“客户”,被呼叫者则称为“服务器”,而号码则为“
4、IP地址+端口”,但在建立连接之前,必须由“客户”发出呼叫,且此时的“服务器”正在监听。因此,基于TCP/IP协议的通信,需要分别建立客户端应用程序和服务器端应用程序。其大致流程如图1所示: 图1 Winsock工作原理 端口号被规定在065535范围内的某一个整数,其中01023被预先定义的服务器通信所占用(如telnet占用23,http占用端口80),所以最好使用102465535这些端口中的某一个,以免发生端口冲突。三、基本方法 客户端要与服务器端进行通信,首先,必须知道服务器端的域名或IP地址(RemoteHost属性),就像要和某人打电话前,必须知道对方的电话号码;其次,还必须和服
5、务器端约定相同的端口(RemotePort属性),用于数据的输入和输出;最后,调用Connect方法与服务器端建立连接。 服务器端应设置一个监听端口(LocalPort属性),端口应与客户端的端口相同,同时调用Listen方法时刻监听客户端的连接请求(ConnectionRequest事件);当接收到客户端的连接请求时,可调用ConnectionRequest事件的Accept方法,这样与客户端的连接就建立了。 客户端和服务器端成功建立连接后,任何一方都可以自由的发送数据(SendData方法)和接收数据(GetData方法),这些方法都在DataArrival事件中。四、案例实现 这里笔者通
6、过一个实际应用,来说明如何使用Winsock控件进行网络通信。实例中有两台计算机,一台作为服务器端,一台作为客户端,实现的功能是将服务器端的某一文件传送到客户端,服务器端和客户端进行点对点的文件传输。 1.实现原理 本文将实现的文件传输只有一个发送方和一个接收方,这是最基本的文件传输方式,运用的原理也比较简单:发送方先获取待传输文件的基本信息,主要是文件名及文件长度(用于创建数据缓冲区);然后,将其发送给接收方;接着,建立和文件一样大小的数据缓冲区,并将文件读入;最后,将数据缓冲区中的数据发送给接收方。与此同时,当接收方接收到文件名和文件长度之后,就为其创建新的文件和数据缓冲区;然后,接收传输
7、的文件数据,并将其放在数据缓冲区中;最后,依次将数据缓冲区的数据写入新创建的文件中。这样便完成了不同计算机之间的文件传输。 2.服务器端主程序代码 “通用”中声明如下:Option Base 1Dim data() As Byte, send As Long 声明数据缓冲区和已传输的数据Dim filepath As String, filename As String, filelength As Long 存储文件信息发送文件名和文件长度代码:Winsock1.SendData filenameWinsock1.SendData filelength发送文件按钮事件的代码:Private
8、Sub sendfile_Click()状态栏显示提示文字StatusBar1.SimpleText = 向客户端发送数据.Open filepath For Binary As #1设置数据缓冲区ReDim data(filelength)读取数据For j = 1 To filelengthGet #1, j, data(j)Next更新发送的数据send = filelength发送数据Winsock1.SendData dataClose #1End Sub开启按钮事件的代码:Private Sub start_Click()Winsock1.Protocol = sckTCPProt
9、ocol 以TCP方式进行通信设置服务器通信程序的端口号,这里笔者使用的端口是8080Winsock1.LocalPort = Val(portText.Text)Winsock1.Listen 等待客户端连接请求状态栏显示提示文字StatusBar1.SimpleText = 服务器已工作,准备接受请求End Sub客户端请求连接事件代码:Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)如果当前连接是打开的,则关闭If Winsock1.State 0 ThenWinsock1.CloseEnd IfWinsock
10、1.Accept requestID 接受客户请求StatusBar1.SimpleText = 有客户请求,建立连接。End Sub 运行结果如图2所示:图2 服务器端运行效果 3.客户端主程序代码 “通用”中声明如下:Option Base 1Dim flag As Boolean 设置开关Dim filename As String, filelength As Long 存储文件信息Dim data() As Byte, received As Long 声明数据缓冲区和已接收的数据初始化开关Private Sub Form_Load()flag = TrueEnd Sub连接按钮事件
11、的代码:Private Sub connect_Click()Winsock1.Protocol = sckTCPProtocol 以TCP方式进行通信设置远程服务器IP地址,为方便调试笔者使用的是自身的IP地址Winsock1.RemoteHost = hostText.Text设置远程服务器通信程序端口号,与服务器端相同Winsock1.RemotePort = Val(portText.Text)Winsock1.connect 与服务器端建立连接End Sub数据到达事件的代码:Private Sub Winsock1_DataArrival(ByVal bytesTotal As L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 基于 TCPIP 协议 点对点 文件传输

链接地址:https://www.31ppt.com/p-4135439.html