写了个WINSOCK传送文件的程序 主要代码如下发送端Dim exe() As Byte
Open "d:\1.exe" For Binary As #1
ReDim exe(LOF(1)) As Byte
Get #1, , exe
Close #1
Winsock2.SendData exe接受端Dim bxb() As Byte
Winsock1.GetData bxb
Open "d:\2.exe" For Binary As #2
Put #2, , bxb
Close #2
Text2.Text = bxb
传送8K以下文件没问题 可是 8K以上 为什么传送过去就只有8K呢

解决方案 »

  1.   

    http://topic.csdn.net/u/20071129/14/2b639fb5-4b3d-42fa-a0ec-e8758632d2e3.html
      

  2.   

    可以说说怎么分包不
    比如Open "d:\1.exe" For Binary As #1
    ReDim exe(LOF(1)) As Byte
    Get #1, , exe
    Close #1现在把二进制数据读到exe数组中间了
    怎么实现1次发8K?
    我知道 如果这样发送Open "d:\1.exe" For Binary As #1
    ReDim exe(LOF(1)) As Byte
    Get #1, , exe
    Close #1
    for a=0 to ubound(exe)-1
    Winsock2.SendData exe
    doevents
    next对方写Dim bxb() As Byte
    Winsock1.GetData bxb
    Open "d:\2.exe" For Binary As #2
    Put #2, , bxb
    Close #2
    Text2.Text = bxb这样每次发数组中的一个数据 对方是可以接受的
    但是这样1个1M文件起码发半天
    谁帮忙优化下
      

  3.   

    超过8k时,winsock会自动分包,那个贴子上有示例啊
        Open "d:\1.exe" For Binary As #1
            ReDim exe(LOF(1)) As Byte
            Get #1, , exe
        Close #1    '读出数据后不要急于发送,在结尾添加一个标志,供客户端判断是否完整的接收到了数据。比如:
         
        Dim arrLength As Long
        arrLength = UBound(exe)
        '添加结束标志
        dim FinisData() as byte
        FinisData = "`!"
        ReDim Preserve arrData(arrLength + 4)
        CopyMemory exe(arrLength + 1), FinisData(0), 4
        '向客户端发送数据
        Winsock1(Index).SendData exe
       DoEvents
        '接收端
        Dim bxb() As Byte
        Dim Finis As String, FinisData(3) As Byte   '结尾标志
        Static mData() As Byte  '完整的数据
        Static mLength As Long
        Static iCount As Integer
        '接收数据
        Winsock1.GetData bxb
        '保存分包收到的数据
        If iCount = 0 Then              '第一次接收
             mData = bxb
            iCount = 1
        Else
            ReDim Preserve mData(mLength + bytesTotal)
            CopyMemory mData(mLength + 1), bxb(0), bytesTotal
        End If
        mLength = UBound(mData)   
        
        '判断结尾(结尾4个字节)
        CopyMemory FinisData(0), mData(mLength - 3), 4
        Finis = FinisData
        If Finis = "`!" Then
            '如果是结尾,截断结尾标志数据
            ReDim Preserve mData(mLength - 4)
           '写入文件
            Open "d:\2.exe" For Binary As #2
               Put #2, , mData
           Close #2
            
            Erase mData
            iCount = 0
            mLength = 0
            MsgBox "OK"
        End If思路就这样,没有测试,下班了......