仿照Alex的思路写了一个多线程文件下载的程序,今晚刚解决了所发现的所有BUG,但却又发现了一个问题。我作了个测试,一边开着迅雷或QQ旋风下载文件,一边开着自己写的程序循环下载同一个文件(10~20K),发现下载失败率很高,网速全被迅雷或QQ旋风抢去了。经调试,发现recv频繁返回-1,或者套接字返回SOCKET_ERROR,但用select函数又检测到有数据可以接收,请问这该如何解决?程序先用select函数检测是否有数据可以接收,如果有才使用recv。select设置的超时时间为30秒,起初设置的是15~20秒,设置为30秒后下载失败率稍微低了一点点。除此之外,在select和recv返回错误后,都有重试机制,重试5次后仍然没下载成功,则退出程序,提示下载失败。反正到目前为止,写的这个程序所出现的所有BUG都是在网速很慢的情况下出现的,请问这样的情况可以用什么样的机制来解决?注:连接、发送和接收都使用了非阻塞模式。

解决方案 »

  1.   

    设置线程优先级是在当前程序优先呢还是在所有运行的程序线程中优先?
      

  2.   

    设置优先级能提高这种环境下的当前进程的下载速度??
      

  3.   

    线程和进程的优先级都设置了,一点儿效果都没有
      

  4.   

    而且即使是降低了QQ旋风或迅雷的进程优先级也没用
      

  5.   

    从来没见过通过线程优先级来提升网速的
    提升网速一般是通过大量并发连接来实现的   
    楼主应该从这方面入手   限制迅雷等p2p的下载端口
      

  6.   

    使用第三方工具限制其它进程的带宽占用
      

  7.   

    解铃还须系铃人,只从自身进程调节是没办法滴
      

  8.   

    都是治标不治本的法子呀,我在组策略里设置了限制保留带宽后,迅雷或QQ旋风也一样撒欢的跑
    不知道可不可以用代码来控制一个进程所使用的流量?
      

  9.   

    杀软里面不都有限制或者关闭某个应用程序联网的功能,LZ研究下共享啊...
      

  10.   

    查清网络的 带宽都做了 什么用途