传文件

更新时间:2023-03-05 23:09:09 阅读: 评论:0

怎么装双系统-一个口一个客

传文件
2023年3月5日发(作者:甘于平凡)

VB实现局域⽹内的⽂件传输

为了设计统⼀和⽤户操作⽅便,我们希望将服务端与客户端融合在⼀起,形成⼀个程序,这样⽤户理解起来,更加直观⼀点(其实这

样做也是为了⽅便调试,⼤家可以在本机上测试,⾃⼰传⽂件给⾃⼰)。所以,我们在程序中需要使⽤两个Winsock控件,⼀个负责监

听,⼀个负责发送,当发送端连接成功以后,便选择⼀个待发送的⽂件(可以是任意⼆进制⽂件),接着将⽂件名和⽂件字节长度发送

给接收端,接收端收到这个消息以后,将⽂件名和⽂件长度解析出来,然后通知发送端可以开始发送⽂件;发送端读到这个消息之后,

将⽂件流以字节的形式发送到接收端,接收端收到后,将⼆进制流回写,保存成⽂件即可。这⾥要注意两点,⼀个是由于Winsock每次

最⼤传输8K的内容,所以需要将⽂件分解,每次传输固定数⽬的字节流,这样发送和接收时都可以根据这个数⽬来判断⽂件传输的进

程,⼀旦字节流数⽬等于⽂件的⼤⼩,就需要关闭相应的⽂件句柄;另⼀点是由于我只使⽤⼀个Winsock控件接收,接收⽂本时需要注

意要将UNICODE转码,解析成可识别的信息。

源代码

'下⾯的代码既是服务器⼜是客户端

'采⽤应答式发送⽅式

'⾃动拆分⽂件,包括2进制

OptionEXPlicit

'PrivateDeclareSubSleepLib"kernel32"(ByValdwMillicondsAsLong)

Dimmybyte()AsByte'发送⽅数组

ConstfilecomesMSG="afileiscoming"'有⽂件到来

ConstRemoteIsReadyMSG="nderisready"'准备好了

ConstFileisOverMSG="thefileinded"'⽂件完毕

ConstRemoteDenyMSG="theurcanceled"'⽤户取消

ConstfilecountMSG="thefilelenghis"'⽂件长度

ConstRecevieIsReadyMSG="Receiverisready"'准备接收

Dimarrdata()AsByte'收到的信息

DimfilesaveAsInteger'保存⽂件的句柄

DimfilehandleAsInteger'发送⽅⽂件的句柄

DimFileSizeAsDouble'⽂件的⼤⼩

DimSendbyteAsLong

DimReceivebyteAsLong

DimMyLocationAsDouble

DimmyMSGAsString'消息

DimFileisOverAsBoolean'⽂件是否已经完毕

ConstReceivePort=7905

ConstBUFFER_SIZE=5734

d=True

EndSub

PrivateSubcmdnd_Click()

OnErrorGoToerrorhandle

WithCommonDialog1

.CancelError=True

.DialogTitle="选择您要传送的⽂件"

.Filter="AllFiles(*.*)*.*"

.ShowOpen

EndWith

filehandle=FreeFile

meForBinaryAccessReadAs#filehandle

d=Fal

FileSize=CDbl(FileLen(me))

n="等待回应>>>"

MsgBox("选择的⽂件⼤⼩为"&LOF(filehandle)&"字节")

=sckConnectedThen

tafilecomesMSG&me'发送发出⽂件信息

EndIf

ExitSub

errorhandle:

d=True

MsgBox("你没有选择⼀个⽂件!")

EndSub

PrivateSubForm_Load()

ort=ReceivePort

FileisOver=True

n="准备传输>>>"

EndSub

PublicFunctionSendChunk()

DimmybytesizeAsLong

<>sckConnectedThenExitFunction

mybytesize=BUFFER_SIZE

IfLOF(filehandle)-Loc(filehandle)

ReDimmybyte(0Tomybytesize-1)

Get#filehandle,,mybyte

tamybyte

Sendbyte=Sendbyte+mybytesize

=Int((100/FileSize)*Sendbyte)

IfSendbyte>=FileSizeThen

FileisOver=True

taFileisOverMSG

EndIf

EndFunction

PrivateSubTimer2_Timer()

=sckConnectedThen

d=Fal

d=Fal

<><><><>8

<>9Then

,ReceivePort

==9Then

EndIf

EndSub

PrivateSubWinsockReceive_ConnectionRequest(ByValrequestIDAsLong)

<>

requestID

EndSub

PrivateSubWinsockReceive_DataArrival(ByValbytesTotalAsLong)

ReDimarrdata(0TobytesTotal-1)

aarrdata,vbByte+vbArray

myMSG=StrConv(arrdata,vbUnicode)'⼆进制转为字符串

SelectCaMid(myMSG,1,17)

CafilecomesMSG'这些消息发送⽅和接受⽅都可收到

'显⽰保存对话框

OnErrorGoToerrorhandle

me=Mid(myMSG,17,Len(myMSG))

Title="选择保存⽂件的路径"

ve

filesave=FreeFile

Receivebyte=0

d=Fal

taRecevieIsReadyMSG

CaFileisOverMSG

Clo#filesave

MsgBox("⽂件传输成功!")'⼤家⼀起处理

d=True

d=True

n="准备传输>>>"

=0

taFileisOverMSG

CafilecountMSG

FileSize=Mid(myMSG,18,Len(myMSG))

meForBinaryAccessWriteAs#filesave

taRemoteIsReadyMSG

n="⽂件准备传输!"

FileisOver=Fal

CaEl

IfReceivebyte

Receivebyte=Re

本文发布于:2023-03-05 23:09:08,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678028949150734.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:传文件.doc

本文 PDF 下载地址:传文件.pdf

上一篇:海蛏子
下一篇:返回列表
标签:传文件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
  • 传文件
    怎么装双系统-一个口一个客2023年3月5日发(作者:甘于平凡)VB实现局域⽹内的⽂件传输 为了设计统⼀和⽤户操作⽅便,我们希望将服务端与客户端融合在⼀起,形成⼀个程序,这样⽤户理解起来,更加直观⼀点(其实这样做也是为了⽅便调试,⼤家可以在本机上测试,⾃⼰传⽂件给⾃⼰)。所以,我们在程序中需要使⽤两个Winsock控件,⼀个负责监听,⼀个负责发送,当发送端连接成功以后,便选择⼀个待发送的⽂件(可以
  • 0℃海蛏子
  • 0℃怎么清理手机缓存
  • 0℃学生怎么瘦腿
  • 0℃怎么灭蚂蚁
  • 0℃婴儿满月
  • 0℃真实伤害
  • 0℃如何驱蚊
  • 0℃鱼粥的做法大全
  • 0℃虾要煮多久
Copyright ©2019-2022 Comsenz Inc.Powered by © 站长QQ:55-9-10-26 专利检索|