VB Winsock 分块发送大文件

yzsqqc 2012-12-16 03:31:39

用小文件做实验可以顺利传递,现在要发送一个较大的图片文件,分块发送。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
...全文
344 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyg0 2013-01-04
  • 打赏
  • 举报
回复
看我的博客 谢谢
嗷嗷叫的老马 2012-12-17
  • 打赏
  • 举报
回复
TCP模式下是没有这个限制的.....会自动分包发送,你只需要从协议上控制与管理传输过程就好了,这里是一个例子:
http://www.m5home.com/bak_blog/article/169.html
只是,如果文件大于100M,那就还得分包,不然内存吃得太多. 但是每个包也不用8K那么小,分个10M一包也行的. 至于UDP模式,好象真是8K,不过我没试过UDP,不好说....
  • 打赏
  • 举报
回复
你对比下呗……自己找的更有意义……
yzsqqc 2012-12-16
  • 打赏
  • 举报
回复
这个解决了,谢谢!但是能不能麻烦哪位大神找一下我上面那个代码有什么问题?谢谢!!
引用

        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
  • 打赏
  • 举报
回复
        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多的文件都能发送哦……

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧