用winsock传输文件,如何才能知道当前已经传输了多少容量?

解决方案 »

  1.   

    传输文件需要将文件分块传输,比如将文件分为1K的小块分别传输,定义一个计数器变量,每次send如果正常返回就将计数器加上1024然后继续传,同时利用这个计数器变量的值和文件大小就能够做出传送的进度条
      

  2.   

    filelen(file)这就得到整个文件的大小,然后你传过去1k那就减掉,那就是剩余大小,把传过去的大小累加起来,不就是已经传过去的大小了....文件传都是分块传的,每块大小都是一样的阿(只有最後一塊会比其他的小).....
      

  3.   

    标准方法应该是:接收方通过SendProgress事件来得到接收过程事件和进度,发送方要通过发送过程对块进行统计。
      

  4.   

    我有相关的代码  ,需要的话,邮箱联系:[email protected]
    注明:要文件传送代码
      

  5.   

    大概代码:
     Private Sub WinsockClient_DataArrival(ByVal bytesTotal As Long)
        If boolReceiveFileFlag = True And bytesTotal <> 0 Then
            If lFileState < lCurrentlyFileLen Then
                Dim filea() As Byte
                WinsockClient.GetData filea
                Put #2, , filea
             '   fPos = fPos + UBound(filea) + 1 '写入文件的位置
                lFileState = lFileState + UBound(filea) + 1
                If lFileState >= lCurrentlyFileLen Then
                 ' MsgBox ("接收成功")
                  Close #2
                  WinsockUDP.SendData "|FILEE:|"
                  Call AddToList(ListRealTime, "文件接收完:" & strCurrentlyFileName)
                  Call ProBarGG(ProBarA, ((lFileCount) / lSendFileCount) * 100)
                  If lFileCount = lSendFileCount Then
                    Call AddToList(ListRealTime, "所有文件接收完")
                    TestFileCRC32 '对每个文件进行CRC校验
                  End If
                    
                End If
                Call ProBarGG(ProBarS, (lFileState / lCurrentlyFileLen) * 100)
            End If
        End If
    End Sub
      

  6.   

    发送方自己控制
    一般以8k为一单位'发送一次
    Private Sub SendOneData(lOneDataLen As Long, lSendSate As Long, lFileLen As Long, sockServer As Winsock)
        If lOneDataLen + lSendSate >= lFileLen Then
            ReDim fileb(lFileLen - lSendSate - 1)
            Get #1, , fileb
            lSendSate = lFileLen
            sockServer.SendData fileb
        Else
            Get #1, , fileb
            lSendSate = lSendSate + lOneDataLen
            sockServer.SendData fileb
        End If
    End Sub