1,502
社区成员
发帖
与我相关
我的任务
分享
Private Sub SendFile(FileName As String)
Dim B() As Byte
Dim i As Long, part As Integer, currentPart As Integer
Open FileName For Binary As #1
i = LOF(1) '文件长度,以字节为单位
part = Int(i / 8191)
currentPart = 1
Debug.Print "Total: " & i ''''''''''''''''''''
Debug.Print "Part: " & part ''''''''''''''''''
For currentPart = 1 To part - 1 Step 1
ReDim B(8191) 'winsock每次最多接受只能接受8192字节!!!
Seek 1, (currentPart - 1) * 8192 + 1
Get #1, , B
Winsock.SendData B ', vbByte + vbArray
DoEvents
Debug.Print "Current: " & currentPart '''''''''''
Next
ReDim B(i - (part - 1) * 8192 - 1)
Seek 1, (part - 1) * 8192 + 1
Get #1, , B
Winsock.SendData B ', vbByte + vbArray
DoEvents
Debug.Print "OK" ''''''''''''''''''''
Close #1
End Sub
http://www.m5home.com/bak_blog/article/169.html
只是,如果文件大于100M,那就还得分包,不然内存吃得太多.
但是每个包也不用8K那么小,分个10M一包也行的.
至于UDP模式,好象真是8K,不过我没试过UDP,不好说.... lngFile = FileLen(PutFileName) \ 8192 '取得文件长度
For i = 0 To lngFile
ReDim myfile(8191) As Byte '初始化数组
Open PutFileName For Binary As #1 '打开文件
Get #1, i * 8192 + 1, myfile '将文件写入数组
Close #1 '关闭文件
WinsockTcp.SendData myfile '发送
DoEvents
Next i
我用这个代码,应该差不多的,1G多的文件都能发送哦……