当前位置:编程学习 > VB >>

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多的文件都能发送哦…… --------------------编程问答-------------------- 这个解决了,谢谢!但是能不能麻烦哪位大神找一下我上面那个代码有什么问题?谢谢!!
引用

        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
--------------------编程问答-------------------- 你对比下呗……自己找的更有意义…… --------------------编程问答-------------------- TCP模式下是没有这个限制的.....会自动分包发送,你只需要从协议上控制与管理传输过程就好了,这里是一个例子:

http://www.m5home.com/bak_blog/article/169.html


只是,如果文件大于100M,那就还得分包,不然内存吃得太多.

但是每个包也不用8K那么小,分个10M一包也行的.

至于UDP模式,好象真是8K,不过我没试过UDP,不好说.... --------------------编程问答-------------------- 看我的博客 谢谢 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除
补充:VB ,  网络编程
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,