请教为什么我多线程下载,网络监控却最多只有2个端口在收发数据?
每个线程下载数据时间比较长,不会因为下载很快结束就退出。如何才能 每个子线程 独占一个网络线程 收发网络数据?例如:
创建 100个线程  网络监控可以看到 有 100条独立网络线程在同时下载数据...伪代码如下:
            Thread[] threads = new Thread[100];
            for (int i = 0; i < threads.Length; i++) {
                threads[i] = new Thread(new ThreadStart(Download));
                threads[i].Name = "线程:" + (i + 1);
                MainShowmsg("开启线程下载:" + (i + 1));
                threads[i].Start();
            }
.......
....       private void Download() {            WebClient wc = new WebClient();
            byte[] htmlbodydata = wc.DownloadData("http://www.xxx.com/xxx.zip");            File.WriteAllBytes(radomfilename+".zip",htmlbodydata );
        }
  

解决方案 »

  1.   

    你网络监控显示的应该是目标端口吧?我没做过http的下载的代码,不过是否跟ftp类似,就是20和21两个服务端端口,一个端口传信令,一个传数据。如果监控的是源端口和目标端口,应该就不止2个了,源端口肯定会有100个,跟你建立的连接数一致,目的端口的数量是固定的,如果目的端口都在变化的话,客户端怎么链接呢,对吧?
      

  2.   

    还有一种可能就是,服务端做了每个ip同时下载次数的限制的,建议lz手动访问你要下载的链接试试,看看是否能够同时下载2次以上,如果不行的话,说明这里也是一个问题所在。
      

  3.   

    大家都没遇到这种问题么? 楼上三位所述我都考虑过了,都不是你们所述的问题。
    我现在的解决方法是 单独写一个 exe程序,然后 主程序调用 成为一个进程 这样可以保证每一个进程一个网络连接。  启动100个程序就可以有100个网络连接。但是 如果通过 thread 启动子线程,则会最多只会共享2个网络连接,  就算活动有100个线程也没用
    感觉是 .net 在优化,但是无法满足需求, 不知道有什么办法可以保证每个线程都独占一个网络连接?
      

  4.   

    会不会网站限制http连接数量呢?
      

  5.   

    楼上的 当然不会因为 我用启动 exe进程的方式可以连接上百个绝对和网站连接数无关
      

  6.   


    晕!照你这么说,假设一个服务器有2000个客户端连接,就要至少有2000个线程在搞什么收发?如果是做课堂练习,就算了。如果是搞产品,2000客户端连接的情况下(没有shutdown和close的情况下)往往也只需要十几个或者而十几个线程足够了。你的那种设计思路,我不知道还能不能承受?!