首页 > 范文大全 > 正文

浅谈在VB中实现文件传输的技巧

开篇:润墨网以专业的文秘视角,为您筛选了一篇浅谈在VB中实现文件传输的技巧范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

内容摘要:随着信息技术的发展,计算机网络的普及,计算机网络所起的作用越来越重要,其中网络文件传输显得尤其重要。本文使用Winsock控件实现两台计算机间的文件传输,描述了Winsock控件的使用方法及有关文件传输的算法。

关键词:TCP协议;Winsock控件;网络编程;

文件传输

一、Winsock控件基础

Winsock即Windows Sockets规范的简称,是目前最流行的网络通信应用程序接口之一。所谓Socket,通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。Winsock控件可以与远程计算机建立连接,并通过用户数据报协议UDP或者传输控制协议TCP进行数据交换,这两种协议都可以用来创建客户与服务器应用程序。与Timer控件和CommandDialog控件类似,Winsock控件在运行时是不可见的。在使用Winsock控件时,首先需要考虑使用什么协议。可以使用的协议包括UDP和TCP。两种协议之间的重要区别在于它们的连接状态:TCP协议控件是基于连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。UDP协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。到底选择哪一种协议通常是由需要创建的应用程序决定的。本文以TCP为例介绍文件传输。

TCP协议的全名为“传输控制协议(transfer control protocol)”,这是一种在Internet上使用的 主要协议。因此,当您使用TCP协议连接两个网络上的设备时,将可以在它们之间交换希望交换的数据。

同时,如果您开发的应用程序属于主从式应用架构应用系统时,将必须要知道应用系统主机的ip地址(利用RemoteHost属于取得)以及连接端口号(利用remoteport属于取得)。在这些数据完全备齐之后,您才可以进行进一步的调用、连接。

因此,如果正在建立主机端应用程序时,必须指定本机,必须指定本机(执行应用程序所在的计算机)所用的连接端口号(localport属于),接着将Winsock控件设置为“监听(listen)”,即可等候远程客户端进行调用与连接。因此,当主机端接收到客户端调用并且要求连接的信息时,将会触发“要求连接()”的事件,接着进行标准“允许”或是“拒绝”的程序。

一旦主机端与客户端连接完成之后,您将可以开始使用“传送数据(senddata)”方法,将数据传送给对方,并且利用“传送完成(sendcomplete)”事件,来检测数据是否传送完毕。同时,在数据传达对方的计算机时,将会触发对方计算的“接收数据(dataarrival)”事件。此时,您可以使用“取得数据(getdata)”方法,来去出这些接收到的数据。

二、Winsock控件工作原理

Winsock控件是基于Socket规范创建的,所以其通信的实质是对Socket接口进行数据的读写操作。如果两个应用程序需要通信,它们可以通过使用Socket类来建立套接字连接,可以将这个过程想象为一次电话呼叫过程:呼叫者通过拨号与被呼叫者连接,当电话接通时,双方都可以自由通话了,只不过这里的呼叫者被称为“客户”,被呼叫者则称为“服务器”,而号码则为“IP地址+端口”,但在建立连接之前,必须由“客户”发出呼叫,且此时的“服务器”正在监听。因此,基于TCP/IP协议的通信,需要分别建立客户端应用程序和服务器端应用程序。

三、基本实现方法

客户端要与服务器端进行通信,首先,必须知道服务器端的域名或IP地址(RemoteHost属性),就像要和某人打电话前,必须知道对方的电话号码;其次,还必须和服务器端约定相同的端口(RemotePort属性),用于数据的输入和输出;最后,调用Connect方法与服务器端建立连接。

四、实例实现

(一)实现原理

本文将实现的文件传输只有一个发送方和一个接收方,这是最基本的文件传输方式,运用的原理也比较简单:发送方先获取待传输文件的基本信息,主要是文件名及文件长度;然后,将其发送给接收方;接着,建立和文件一样大小的数据缓冲区,并将文件读入;最后,将数据缓冲区中的数据发送给接收方。与此同时,当接收方接收到文件名和文件长度之后,就为其创建新的文件和数据缓冲区;然后,接收传输的文件数据,并将其放在数据缓冲区中;最后,依次将数据缓冲区的数据写入新创建的文件中。这样便完成了不同计算机之间的文件传输。

(二)服务器端主程序主要代码

'发送文件名和文件长度代码:

Winsock1.SendData filename

Winsock1.SendData filelength

'发送文件的内容

Open filepath For Binary As #1'设置数据缓冲区

ReDim data(filelength)

For j = 1 To filelength

Get #1, j, data(j)

Next

send = filelength

Winsock1.SendData data

Close #1

End Sub

"客户端请求连接"事件代码:

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)

If Winsock1.State 0 Then

Winsock1.Close

End If

Winsock1.Accept requestID '接受客户请求

End Sub

(三)客户端主程序主要代码代码

"连接"按钮事件的代码:

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 Long)

'状态栏显示提示文字

StatusBar1.SimpleText = "正在接收服务器发送的数据..."

'先接收文件名和文件的长度

If flag = True Then

Winsock1.GetData filename, vbString, bytesTotal - 4

Winsock1.GetData filelength, vbLong

'建立文件

Open filename For Binary As #1

flag = False

Else

'设置缓冲区

ReDim data(bytesTotal)

'接收数据并写入文件

Winsock1.GetData data, vbArray + vbByte

For j = received + 1 To received + bytesTotal

Put #1, j, data(j - received - 1)

Next

'更新接收到的数据

received = received + bytesTotal

ProgressBar1.Value = Int((received / filelength) * 100)

If ProgressBar1.Value >= 100 Then Close #1

End If

End Sub

从以上的实例中,基本了解了有关Winsock控件的使用方法和文件传输的过程。然而,当需要传送的数据比较大时,就不能像以上介绍的那样,直接将整个文件放入数据缓冲区中了,我们的内存是无法忍受用一个几百MB甚至上GB的空间去存储那些临时数据的。显然,这种做法已远不能满足我们的需求,这时可以将文件按照一定的大小,分成若干个数据包。首先,设置数据包的大小,根据文件的基本信息,计算出总共需要的数据包数;然后,依次读取同数据包一样大小的数据到数据缓冲区中;接着,将数据缓冲区中的数据,发送到指定的计算机上;同时在另一端,建立一个数据缓冲区,缓冲区的大小要根据接收到的数据来确定,依次接收客户端传输过来的数据包,并将数据缓冲区的数据写入相应的文件中,这样就很容易实现大文件的传输了。

五、小结

本文通过在VB中使用Winsock控件,实现网络之间的文件传输,更进一步理解了其工作原理。虽然本文重点介绍的是TCP协议的文件传输,但是UDP协议的文件传输实现与TCP是相似的。本文介绍的Winsock工作原理、实现方法、实例的展现还是有普遍的适用性的,能在一定的程度上有助于解决普遍的问题。

参考文献:

[1]黄玲玲,杨剀,王颖.在VB中使用Winsock控件实现局域网通信[J].信息技术,2005,6

[2]王晓平,钟军.VisualBasie网络通信协议分析与应用实现.2003

[3]崔彦锋,许小荣.VB网络与远程控制编程实例教[M].北京:北京希望电子出版社,2002,8

[4]张红军,王虹.Visual Basic 6.0中文版高级应用与开发指南[M].人民邮电出版社,199,10