最近做一个视频采集系统,CLIENT端需要把上G的资料往server端发(最大的20个G都有),CLIENT端网络环境复杂 VPN拨入比较常见,要求用单线程传输,实现断点续传。做出来 实际测了下,发现下的文件经常MD5值对不上。 导致文件打开出错
急求这方面的朋友给个完美解决方案。 分不够再加。  直到解决为止。

解决方案 »

  1.   

    试下传小文件在不断开的情况下看能出错不?排除socket常规错误如果仅在有断开情况下发生错误,看一下写入文件的模式,只在确保写入文件成功才保存状态写文件是有缓冲的,并不是执行了Write就真的写入文件了写入文件指定不用缓冲FILE_FLAG_NO_BUFFERING或者每次Flush, 
    或者定时保存,保护硬盘
      

  2.   

    一个实现FTP断点续传的类
    http://blog.csdn.net/caps77/archive/2004/12/02/201445.aspx
    使用CFtpconnection类实现文件的断点续传的问题
    http://blog.csdn.net/wh825554/archive/2006/09/05/1179335.aspx
      

  3.   

    1:推荐您看一下CTOrrent的源代码,学习一下里面的思想。
    2:也就是BT协议的Piece的概念把大文件划分为多个Piece,每个Piece有一个Hash值,最后服务前段验证这个Hash是否正确,否则丢弃要求重发,可以采用多个线程。开发体现的主要是设计,这种思想应该足以你的开发了。
      

  4.   

    原因很简单 2个第一 你的断点续传有问题
    如果你的代码可以保证的化 ,向下看。 不过如果你是局域网出现这个情况,请你检测你自己的代码第二 tcp/ip 本身的错误。tcp ip 不能保证数据可以正确的传送。 大家不要激动,我不是胡说,也不是耸人听闻。如果你把ip的校验方式好好的看一看你就知道了ip 的校验保护不是100% 保护数据不被篡改。 这点在tcp/ip 卷一是有说明的。解决方案
    类bt 方式; 将文件分片, 每一片做hash,然后生成一个种子
      

  5.   

    静候 im2web 的 第二 tcp/ip 本身的错误。
      

  6.   


    你可以看一下ip 头的校验算法,ip只是简单的做了奇偶校验,但是他没有对自己传送的数据流做mash , 所以 如果网络出了问题,但是奇偶校验是正确的,那么
    tcp 就会认为他的数据是正确的。举个例子a ==> b 一个字符串  'aaaa'a==> b 一个字符串   'bbbb'b 在预先不知道 a 会送什么数据的时候, 他如何校验bbbb 这个字符串是否正确? 没有办法。 所有bt 的分片从一定程度解决了这个问题。
      

  7.   

    最简单的例子 就是arp 挂马 和 中间人攻击。 这是最明显的tcp /ip 本身问题的例子。为什么你的服务器没被攻克,只要arp欺骗了,仍然可以注入你的http流
      

  8.   

    最后推荐一下偶的小站。 http://www.msn2web.com  一个web版的msn网址
      

  9.   


    正确,tcp传输一样会丢包、会误码,不要太相信tcp连接了,还是要相信自己
    每个数据包都封装一个校验标志,校验不通过,重新传该包
      

  10.   

    20G TCP顺序传难免出问题,还是广域网。
    考虑分片稳妥些,
    自己订一个简单的协议,
    先取得文件大小生成文件,
    再分块传输校验
      

  11.   

    现在我的传输方式是 client 端 循环发送定长的数据包 SERVER端接收。  如果做效验的话 一来一回肯定很影响传输速度。 大家都是怎么做的呢?  麻烦共享一下。
      

  12.   

    是udp传输吧, 可能出现丢包了
      

  13.   

    20G TCP顺序传难免出问题,还是广域网。 
    考虑分片稳妥些, 
    自己订一个简单的协议, 
    先取得文件大小生成文件, 
    再分块传输校验
      

  14.   

    ……………………
    学习中…………
    小问一下,CTOrrent是什么东西?