- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VBSOCKET实现文件传输
VB中使用WinSock控件传送文件传送文件对于网络编程来说是基本的功能,比如远程控制软件。在编制一个软件时,我从网上下了很多传文件的程序,这些程序提供的传文件功能根本就不能用。传文本还可以,传二进制文件根本就不行。因此,作为一个基本的功能模块,有必要单独介绍一下。首先,在VB中要传送字符串,你可以这样写:Dim strData As String strData = Test Winsock1.SendData strData 但是如果你传送的二进制文件,你还能用String变量来存放吗?从理论上分析是不行的,我也做了实验,确实是不行的。文件虽然可以传,但是接受的文件和发送的不一样,原因可能是二进制文件里可以有任何字符,但是不是所有的字符都可以放在String变量里。除了String类型的变量,VB中其他类型的变量都只有几个字节长,难道一次只能发几个字节吗?那样岂不是要累死机器了!其实,情况没有那么悲观,我们完全可以使用数组来解决这个问题,就是使用byte数组。把要传送的文件都读到数组里,然后发送出去。程序如下:FileName 为要传送的文件名,WinS为发送文件的WinSock控件。这是一个发送端的程序。Public Sub SendFile(FileName As String, WinS As Winsock) Dim FreeF As Integer 空闲的文件号Dim LenFile As Long 文件的长度Dim bytData() As Byte 存放数据的数组FreeF = FreeFile 获得空闲的文件号Open FileName For Binary As #FreeFile 打开文件DoEvents LenFile = LOF(FreeF) 获得文件长度ReDim bytData(1 To LenFile) 根据文件长度重新定义数组大小Get #FreeF, , bytData 把文件读入到数组里Close #FreeF 关闭文件WinS.SendData bytData 发送数据End Sub 接受端的程序如下:Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim bytData() As Byte Dim f f = FreeFile Open strFileName For Binary As #f ReDim bytData(1 To bytesTotal) Winsock1.GetData bytData Put #f, i, bytData i = i + bytesTotal 保证每次写都是在文件的末尾, i是个全局变量Close #f End Sub 这里有两个需要注意的地方,ReDim Preserve bytData(1 To LenFile),下标是从1开始的,如果你写成ReDim bytData( LenFile),下标就是从0开始了,数组就有LenFile+1长了。LenFile = LOF(FreeFile)中的LOF是获得文件长度的函数,是VB里带的,我见过很多例子用API,或者循环的读直到末尾来获取文件长度,这样都是很麻烦的,使用LOF函数就可以了。这样的程序,即可以传送文本文件,也可以传送二进制文件。但是你有没有发现这个程序的问题呢?如果我要传送一个50M的文件呢?系统可以为bytData分配50M的内存空间吗?于是笔者拿一个50M的文件做实验吧,接收到的文件和原来的文件不一样,比原来的大。问题出在那呢?首先,根据文件大小重新定义bytData数组的大小本身就有问题,系统是不可能无限制的给数组分配空间的,即使可以,也会造成系统响应变慢。在传50M文件的时候,系统就跟死机了一样。那么怎么解决这个问题呢,一个自然的想法就是把数据分段传送。程序如下:发送程序, iPos是个全局变量,初始值为0。这个变量保存着当前数据的位置。Const iMax = 65535是每个数据块的大小。dim ipos as longConst iMax = 65535Dim FreeF As Integer 空闲的文件号Dim LenFile As Long 文件的长度Dim bytData() As Byte 存放数据的数组FreeF = FreeFile 获得空闲的文件号Open FileName For Binary As #FreeF 打开文件DoEvents LenFile = LOF(FreeF) 获得文件长度If LenFile = iMax Then 如果要发送的文件小于数据块大小,直接发送ReDim bytData(1 To LenFile) 根据文件长度重新定义数组大小Get #FreeF, , b
您可能关注的文档
- SYB师资培训班结业考试.doc
- Talent概要设计说明书.docx
- TB10443-2010铁路建设项目资料管理规程表格(附录C施工记录用表C01-C016).doc
- TCP文件传输实验.doc
- TCW-32EVI焊接控制箱说明书.doc
- TD-LTECQI计算说明.docx
- TD610涡轮蜗杆减速机使用说明书.docx
- Solidworks学习中的经验记录.doc
- TDP治疗仪使用应用说明.doc
- T6软件产品功能说明书.doc
- 2023-2024学年广东省深圳市龙岗区高二(上)期末物理试卷(含答案).pdf
- 2023-2024学年贵州省贵阳市普通中学高一(下)期末物理试卷(含答案).pdf
- 21.《大自然的声音》课件(共45张PPT).pptx
- 2023年江西省吉安市吉安县小升初数学试卷(含答案).pdf
- 2024-2025学年广东省清远市九校联考高一(上)期中物理试卷(含答案).pdf
- 广东省珠海市六校联考2024-2025学年高二上学期11月期中考试语文试题.pdf
- 2024-2025学年语文六年级上册第4单元-单元素养测试(含答案).pdf
- 2024-2025学年重庆八中高三(上)月考物理试卷(10月份)(含答案).pdf
- 安徽省安庆市潜山市北片学校联考2024-2025学年七年级上学期期中生物学试题(含答案).pdf
- 贵州省部分校2024-2025学年九年级上学期期中联考数学试题(含答案).pdf
最近下载
- DPtech FW1000系列应用防火墙典型配置v3.2.pdf
- 部编人教版小学四年级语文上册《一只窝囊的大老虎》教案.pdf
- 2024年新高考英语总复习考点12 分词(上海专用原卷版).docx VIP
- (2024秋)部编版一年级语文上册《 四季》PPT课件【优质版】.pptx
- 脑出血患者护理心得.doc VIP
- 【全部】小学1--6年年级统编语文教材(上下册)古诗词.pdf
- 清华大学“应用随机过程”习题答案.pdf
- BDA-老虎基金京东深度研究报告EN-2015 05 19.pptx VIP
- 成都至峨眉山高速公路环评报告书.pdf VIP
- 人教版六年级数学上册第五单元《圆的认识》作业设计.pdf
文档评论(0)