Click here to Skip to main content
15,886,137 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
hi i work on a project for download a large file in multiconnection.i used this code but have some problems and didn't work connections together.

program.cs:
C#
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

           

            List<FileDownloader> filewonloadersList = new List<FileDownloader>();
       System.Net.WebRequest req = System.Net.HttpWebRequest.Create("http://filetests.hosthop.com/Large_File_Downloads/100M.zip");
            req.Method = "HEAD";
            System.Net.WebResponse resp = req.GetResponse();
            int responseLength = int.Parse(resp.Headers.Get("Content-Length"));
            int downloadparts = responseLength / 5;
            for (int i = 0; i < responseLength; i = i + downloadparts)
            {
                FileDownloader filedownloadlistitem = new FileDownloader();
                filedownloadlistitem.Start = i;
                filedownloadlistitem.End = i + downloadparts;
                filedownloadlistitem.partnumber = filewonloadersList.Count + 1 ;
                filedownloadlistitem.Url = req.RequestUri.ToString();
                filewonloadersList.Add(filedownloadlistitem);
            }

                List<Thread> threadList = new List<Thread>();
                for (int i = filewonloadersList.Count-1; i >= 0; i--)
                {
                    ThreadStart ts = new ThreadStart(filewonloadersList[i].DoDownload);
                    
                    Thread run = new Thread(ts);
                    threadList.Add(run);
                    run.Start();
                ,,}


                //foreach (Thread aThread in threadList)
                //{
                //  //will wait 
        }
    }
}


and Filedownloader.cs is:

C#
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Threading;

namespace ConsoleApplication1
{
        public class FileDownloader{
            public int Start;
            public int End;
            public string Url;
            public object partnumber;
           public  void DoDownload(){

                // Create a New 'HttpWebRequest' object .
               HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(Url);
                myHttpWebRequest.AddRange(Start, End);
                //Console.WriteLine("Call AddRange("+Start+","+End+")");
                //Console.Write("Resulting Request Headers: ");
                //Console.WriteLine(myHttpWebRequest.Headers.ToString());

                // Assign the response object of 'HttpWebRequest' to a 'HttpWebResponse' variable.
                HttpWebResponse myHttpWebResponse=null;
                while (myHttpWebResponse == null)
                {
                    try
                    {
                        myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
                    }
                    catch { }
                }

                // Displays the headers in the response received
                //Console.Write("Resulting Response Headers: ");
               // Console.WriteLine(myHttpWebResponse.Headers.ToString());

                // Display the contents of the page to the console.
                Stream streamResponse = myHttpWebResponse.GetResponseStream();
                StreamReader streamRead = new StreamReader(streamResponse);
                Char[] readBuffer = new Char[256];
                int count = streamRead.Read(readBuffer, 0, 256);
               // Console.WriteLine("\nThe HTML contents of the page from "+Start+" to "+End+" characters are :\n  ");
                TextWriter write2file = new StreamWriter("c:\\testdownloadfile" + Convert.ToString(partnumber) + ".txt", true); 
               
                    while (count > 0)
                {
                    String outputData = new String(readBuffer, 0, count);
                    Console.WriteLine(outputData);
                    
                    write2file.Write(outputData);
                    
                    count = streamRead.Read(readBuffer, 0, 256);
                    Thread.Sleep(1);

                }
                // Release the response object resources.
                streamRead.Close();
                write2file.Close();            
                streamResponse.Close();
                myHttpWebResponse.Close();
                    
            }
        }
}


how can i solve it?plz help!ik
Posted
Comments
lewax00 3-Apr-13 17:47pm    
You'll need to be more specific than "have some problems and didn't work connections together". How is it not working exactly? Specifically, what do you expect it to do, and what is it actually doing? Also, include any error messages, if there are any.
mohsenadc 3-Apr-13 18:01pm    
It should start download functions (in filewonloadersList list)together.
In the other word , cpu just do a theard but i need to run all theards.
lewax00 3-Apr-13 19:56pm    
I'm not sure I understand the problem, is only one thread completing? If so, have you made sure a) all threads have actually finished executing and b) there are no errors in the other threads?
mohsenadc 4-Apr-13 12:32pm    
first thread (in list of threads)do dodownload function and after it finished ,next thread start download.in a download manager application like IDM ,connections start together but in this code connection are in an queue.
lewax00 4-Apr-13 16:41pm    
Have you confirmed it's not the server? e.g. is the server only sending data to one thread at a time? Some servers only allow one file download at a time.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900