在windows下 , 我用 socket 进行tcp通信 ,采用异步方式工作。比如 现在正在进行一个异步的发送过程 ,要发送的字节数是 100M ,那么在发送过程中,如果我想知道现在发送了多少了,怎么可以知道?原先理解的 WSAGetOverlappedResult 函数可以做到 ,但测试结果不对,它的lpcbTransfer参数不会被刷新 ,无法得到我想要的结果。请问朋友们怎样可以解决呢?

解决方案 »

  1.   

    lpcbTransfer,是每次WSAsend,实际发成功的字节数,你要把他累加到其他变量上,累计数和你最初投递的总字节数的比值,不就是百分比吗,异步发送100M,肯定不是发送完才有异步事件,肯定会发送一部分就有异步事件返回,你处理一下就搞定了,如果一次能发送完的,那属于非常快,进度记录也就意义不大。
      

  2.   

    我测试过, lpcbTransfer根本不会随着进度在变化,哪为朋友能给出测试成功的代码
      

  3.   

    send返回值,都是你实际发送的数据大小
      

  4.   

    每次send前面加一个头,说明总长度和目前长度这样你不就知道进度了嘛!!!搞这么复杂!!