VBSOCKET实现文件传输.docxVB 中使用 WinSock 控件传送文件
传送文件对于网络编程来说是基本的功能, 比如远程控制软件。 在编制一个软件时,我从网上下了很多传文件的程序, 这些程序提供的传文件功能根本就不能用。传文本还可以,传二进制eeF 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 + 1, byt
VBSOCKET实现文件传输 来自淘豆网m.daumloan.com转载请标明出处.