欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    VB SOCKET 实现文件资料传输Word文件下载.docx

    • 资源ID:14968057       资源大小:18.23KB        全文页数:10页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    VB SOCKET 实现文件资料传输Word文件下载.docx

    1、其实,情况没有那么悲观,我们完全可以使用数组来解决这个问题,就是使用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 F

    2、or 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 = FreeFi

    3、le 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(F

    4、reeFile)中的LOF是获得文件长度的函数,是VB里带的,我见过很多例子用API,或者循环的读直到末尾来获取文件长度,这样都是很麻烦的,使用LOF函数就可以了。 这样的程序,即可以传送文本文件,也可以传送二进制文件。但是你有没有发现这个程序的问题呢?如果我要传送一个50M的文件呢?系统可以为bytData分配50M的内存空间吗? 于是笔者拿一个50M的文件做实验吧,接收到的文件和原来的文件不一样,比原来的大。问题出在那呢? 首先,根据文件大小重新定义bytData数组的大小本身就有问题,系统是不可能无限制的给数组分配空间的,即使可以,也会造成系统响应变慢。在传50M文件的时候,系统就跟死机

    5、了一样。那么怎么解决这个问题呢,一个自然的想法就是把数据分段传送。 发送程序, iPos是个全局变量,初始值为0。这个变量保存着当前数据的位置。Const iMax = 65535是每个数据块的大小。 dim ipos as longConst iMax = 65535Dim FreeF As Integer 获得空闲的文件号 Open FileName For Binary As #FreeF 获得文件长度 If LenFile = (LenFile - iMax) 发送整块数据的循环 ReDim bytData(1 To iMax) Get #FreeF, iPos + 1, bytDat

    6、a WinS.SendData bytData iPos = iPos + iMax 移动iPos,使它指向下来要读的数据 Loop 这里要注意的是,必须检查文件有没有剩下的数据,如果文件大小正好等于数据块大小的 整数倍,那么就没有剩下的数据了 ReDim bytData(1 To LenFile - iPos) 发送剩下的不够一个数据块的数据 Get #FreeF, iPos + 1, bytData WinS.SendData bytData Close #FreeF 下面是接收端的程序: Private Sub Winsock1_DataArrival(ByVal bytesTotal

    7、As Long) Dim bytData() As Byte Dim lLenFile As Long Dim f f = FreeFile Open strFileName For Binary As #f strFileName是文件名 lLenFile = LOF(f) ReDim bytData(1 To bytesTotal) Winsock1.GetData bytData If lLenFile = 0 Then lLenFile=0表示是第一次打开文件,这里有个问题,就是如果如果该文件存在的话,就会出错,应该在打开前检查文件是否存在。这里我省略了 Put #f, 1, bytD

    8、ata Else Put #f, lLenFile + 1, bytData End If Close #f End SubVB SOCKET 实现文件传输 支持断点续传Option ExplicitConst PACKSIZE As Long = 65536 每包大小为64KPrivate filepath As StringPrivate filename As StringPrivate filelength As Long 存储文件信息Private data() As BytePrivate pack As LongPrivate sendedData As Long 数据缓冲区,文

    9、件包数,已传输的数据Private alreadySend As BooleanPrivate cmsStr As StringConst fileD As String = D:NMSPluginsourceLanBus.rarPrivate Sub cmdConnectClient_Click() WinsockSend.Protocol = sckTCPProtocol WinsockSend.RemoteHost = 127.0.0.1 WinsockSend.RemotePort = 8080 WinsockSend.Connect 连接客户端End SubPrivate Sub c

    10、mdSendFile_Click() Open fileD For Binary As #3 filename = LanBus.rar filelength = LOF(3) Close #3 WinsockSend.SendData (NMSP_AYUREADY)Private Sub WinsockSend_Connect() StatusBar1.Caption = 已与客户端建立连接。发送文件按钮事件代码:Private Sub sendFile() Dim i As Integer Dim j As Long Dim m As Long filepath = fileD向客户端传送

    11、文件: & filename & 大小为: filelength 计算需要传输文件的包数 pack = (filelength - sendedData) PACKSIZE If (filelength - sendedData) Mod PACKSIZE) 0 Then pack = pack + 1 End If If pack = 0 Then传输文件 Open filepath For Binary As #1 For i = 1 To pack如果只有一包 If pack = 1 Then Debug.Print filename= | filelength= filelength

    12、& | send= sendedData ReDim data(filelength - sendedData)读取数据 For j = sendedData + 1 To filelength Get #1, j, data(j - sendedData) Next更新已传输文件的数据 sendedData = filelength发送文件数据 WinsockSend.SendData data如果是最后一包 ElseIf i + 1 = pack Then读取最后一包的数据 For j = 1 To filelength - sendedData Get #1, sendedData + j, data(j) Exit For Else将文件数据放到数据缓冲区 ReDim data(PACKSIZE) For m = 1 To PACKSIZE Get #1, sendedData + m, data(j) sendedData = sendedData + PACKSIZE End


    注意事项

    本文(VB SOCKET 实现文件资料传输Word文件下载.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开