VBSOCKET实现文件传输

VBSOCKET实现文件传输

ID:68820496

大小:52.50 KB

页数:11页

时间:2021-10-21

VBSOCKET实现文件传输_第1页
VBSOCKET实现文件传输_第2页
VBSOCKET实现文件传输_第3页
VBSOCKET实现文件传输_第4页
VBSOCKET实现文件传输_第5页
VBSOCKET实现文件传输_第6页
VBSOCKET实现文件传输_第7页
VBSOCKET实现文件传输_第8页
VBSOCKET实现文件传输_第9页
VBSOCKET实现文件传输_第10页
资源描述:

《VBSOCKET实现文件传输》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、--VB中使用WinSock控件传送文件传送文件对于网络编程来说是基本的功能,比如远程控制软件。在编制一个软件时,我从网上下了很多传文件的程序,这些程序提供的传文件功能根本就不能用。传文本还可以,传二进制文件根本就不行。因此,作为一个基本的功能模块,有必要单独介绍一下。首先,在VB中要传送字符串,你可以这样写:DimstrDataAsStringstrData="Test"Winsock1.SendDatastrData但是如果你传送的二进制文件,你还能用String变量来存放吗?从理论上分析是不行的,

2、我也做了实验,确实是不行的。文件虽然可以传,但是接受的文件和发送的不一样,原因可能是二进制文件里可以有任何"字符",但是不是所有的字符都可以放在String变量里。除了String类型的变量,VB中其他类型的变量都只有几个字节长,难道一次只能发几个字节吗?那样岂不是要累死机器了!其实,情况没有那么悲观,我们完全可以使用数组来解决这个问题,就是使用byte数组。把要传送的文件都读到数组里,然后发送出去。程序如下:FileName为要传送的文件名,WinS为发送文件的WinSock控件。这是一个发送端的程序

3、。PublicSubSendFile(FileNameAsString,WinSAsWinsock)DimFreeFAsInteger'空闲的文件号DimLenFileAsLong'文件的长度DimbytData()AsByte'存放数据的数组FreeF=FreeFile'获得空闲的文件号OpenFileNameForBinaryAs#FreeFile'打开文件DoEventsLenFile=LOF(FreeF)'获得文件长度ReDimbytData(1ToLenFile)'根据文件长度重新定义数组大小

4、Get#FreeF,,bytData'把文件读入到数组里Close#FreeF'关闭文件WinS.SendDatabytData'发送数据EndSub接受端的程序如下:PrivateSubWinsock1_DataArrival(ByValbytesTotalAsLong)DimbytData()AsByte-.可修编.--Dimff=FreeFileOpenstrFileNameForBinaryAs#fReDimbytData(1TobytesTotal)Winsock1.GetDatabytDat

5、aPut#f,i,bytDatai=i+bytesTotal'保证每次写都是在文件的末尾,i是个全局变量Close#fEndSub这里有两个需要注意的地方,ReDimPreservebytData(1ToLenFile),下标是从1开始的,如果你写成ReDimbytData(LenFile),下标就是从0开始了,数组就有LenFile+1长了。LenFile=LOF(FreeFile)中的LOF是获得文件长度的函数,是VB里带的,我见过很多例子用API,或者循环的读直到末尾来获取文件长度,这样都是很麻烦

6、的,使用LOF函数就可以了。这样的程序,即可以传送文本文件,也可以传送二进制文件。但是你有没有发现这个程序的问题呢?如果我要传送一个50M的文件呢?系统可以为bytData分配50M的存空间吗?于是笔者拿一个50M的文件做实验吧,接收到的文件和原来的文件不一样,比原来的大。问题出在那呢?首先,根据文件大小重新定义bytData数组的大小本身就有问题,系统是不可能无限制的给数组分配空间的,即使可以,也会造成系统响应变慢。在传50M文件的时候,系统就跟死机了一样。那么怎么解决这个问题呢,一个自然的想法就是把

7、数据分段传送。程序如下:发送程序,iPos是个全局变量,初始值为0。这个变量保存着当前数据的位置。ConstiMax=65535是每个数据块的大小。dimiposaslongConstiMax=65535DimFreeFAsInteger'空闲的文件号DimLenFileAsLong'文件的长度DimbytData()AsByte'存放数据的数组FreeF=FreeFile'获得空闲的文件号OpenFileNameForBinaryAs#FreeF'打开文件DoEventsLenFile=LOF(Fre

8、eF)'获得文件长度IfLenFile<=iMaxThen'如果要发送的文件小于数据块大小,直接发送ReDimbytData(1ToLenFile)'根据文件长度重新定义数组大小Get#FreeF,,bytData'把文件读入到数组里Close#FreeF'关闭文件WinS.SendDatabytData'发送数据-.可修编.--ExitSubEndIf'文件大于数据块大小,进行分块发送DoUntil(iPos>=(LenFile-iMax

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。