用winsock使用TCP/IP协议时如何传送8k以上的文件?当传送的文件大于8k时,接收时就会出错!如何把文件拆分传送,然后在接受端再把文件组合起来!

解决方案 »

  1.   

    你需要在发送和接受端建立一个协议。文件(可拆分)打包后发送,包头包括起始字符、块号、尾块标志、块长度,包尾加一个校验码域,例如 CRC。发送端将文件拆分打包后发送。接收端在正确接收解包后,按顺序拼接就可以了。
      

  2.   

    http://dev.csdn.net/develop/article/47/47739.shtm
    这里分的包
    =========================================================================
    '为了清晰,下面分别用两个子过程来完成计算这次还可以传多少个字节的数据和传送数据
    '==========================================================================
    Private Function SplitFile() As Long '拆包
            On Error Resume Next
            Dim GetCount As Long
            '计算出这次可发送的字节数
            If LenFile >= 4000 Then
            GetCount = 4000
            LenFile = LenFile - GetCount
            Else
            GetCount = LenFile
            LenFile = LenFile - GetCount
            End If
            SplitFile = GetCountEnd Function
    Private Sub TCPSendFile(objWinSock As Winsock, FileNumber As Integer, SendLen As Long)
            Dim FileByte() As Byte, i As Long, j As Long
            Dim temp As String
            ReDim Sendbaye(0)
            
            Dim tempa As String * 4
            ReDim FileByte(SendLen - 1)
            tempa = SendLen + 7
            Sendbaye = tempa ' 把长度负值给包头
            Get #FileNumber, , FileByte '读取文件
            ReDim Preserve Sendbaye(SendLen + 7) '把包头+到文件头
            For i = 0 To UBound(FileByte)
                Sendbaye(i + 7) = FileByte(i)
            Next
            frmmain.Winsock0.SendData Sendbaye
    End Sub