VB 中使用 WinSock 控件传递文件
传递文件关于网络编程来说是基本的功能, 比方远程控制软件。 在编制一个软件时,我从网上下了好多传文件的程序, 这些程序供给的传文件功能根本就不可以用。传文本还可以够,传二 Dim 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, , bytData ' 把文件读入到数组里
Close #FreeF ' 封闭文件
bytData ' 发送数据
Exit Sub
End If
'文件大于数据块大小,进行分块发送
Do Until (iPos >= (LenFile - iMax)) ' 发送整块数据的循环
ReDim bytData(1 To iMax)
Get #FreeF, iPos + 1, bytData
bytData
iPos = iPos + iMax ' 挪动 iPos ,使它指向下来要读的数据 Loop
'这里要注意的是,一定检查文件有没有剩下的数据,假如文件大小正好等于数据块大小的
整数倍,那么就没有剩下的数据了
ReDim bytData(1 To LenFile - iPos) ' 发送剩下的不够一个数据块的数据
Get #FreeF, iPos + 1, bytData
bytData
Close #FreeF
下边是接收端的程序:
Private Sub Winsock1_DataArrival(ByVal bytesTotal 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)
bytData
是文件名
If lLenFile = 0 Then 'lLenFile=0 表示是第一次翻开文件,这里有个问题,就是 '
假如假如该文件存在的话,就会犯错,应当在翻开前检查文件能否存在。 (这里我省略了)
Put #f, 1, bytData
Else
Put #f, lLenFile +
VBSOCKET实现文件传输 来自淘豆网m.daumloan.com转载请标明出处.