自己写了个利用TCP传送文件的模块,但在实际传送中速度却很慢。大概只有同等网络条件下QQ文件传送速度的1/3除了设置socket的缓冲和TCP的窗口大小外 有什么东西对文件传送速度影响最大?
我在实际实现中是用ReadFile读一段 然后发送出去,收到后在WriteFile。比较高效率的实现应该是怎样的呢?他们采取的什么方法?

解决方案 »

  1.   

    在收发操作上我采用重叠I/O,主要就是为主线程可以随时终止收发操作
    但我只使用一个overlapped结构,直到WSAGetOverlappedResult()成功后才进行第二个操作。你的意思是要我用多个overlapped结构一次进行N个收发操作吗?
    在只使用一个socket情况下这样会有帮助吗?
      

  2.   

    为什么带星星的都喜欢抛出句话就闪我一共操作一个socket还要怎么多线程?
    是指网络收发和磁盘操作分开吗?
      

  3.   

    當然多綫程需要開多個socket傳 另外QQ傳文件用的是UDP
      

  4.   

    我说的是传送单一文件
    这也需要开多线程吗?多个线程传送文件的不同部分?这样会有效率?另外QQ传送文件是TCP,你可以随便开个防火墙看看
      

  5.   

    你可以多个线程将数据分块传输
    就跟flashget一样
    然后在接收段将数据重组
      

  6.   

    建议先采用wupangzi(无本之木) 的方法进行分析一下,找出问题的症结所在,然后再对症下药。
    另外,可以考虑的策略有:
    1、空间换时间,加大接受和发送端的缓存;
    2、缓存策略要设置好,减少动态分配和回收内存的次数;
    3、多socket,多线程,分别读取文件各段,数据分块传输,编号,然后在服务器端重组,按序写入。