VB Winsock 分块发送大文件
用小文件做实验可以顺利传递,现在要发送一个较大的图片文件,分块发送。Debug发现发送了4块之后就不继续了,求教。附发送模块代码及Debug.Print内容
Debug:
Total: 2665206
Part: 325
Current: 1
Current: 2
Current: 3
Current: 4
--------------------编程问答--------------------
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
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多的文件都能发送哦…… --------------------编程问答-------------------- 这个解决了,谢谢!但是能不能麻烦哪位大神找一下我上面那个代码有什么问题?谢谢!!
--------------------编程问答-------------------- 你对比下呗……自己找的更有意义…… --------------------编程问答-------------------- TCP模式下是没有这个限制的.....会自动分包发送,你只需要从协议上控制与管理传输过程就好了,这里是一个例子:
http://www.m5home.com/bak_blog/article/169.html
只是,如果文件大于100M,那就还得分包,不然内存吃得太多.
但是每个包也不用8K那么小,分个10M一包也行的.
至于UDP模式,好象真是8K,不过我没试过UDP,不好说.... --------------------编程问答-------------------- 看我的博客 谢谢 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除
补充:VB , 网络编程