Отправляйте и получайте несколько файлов одновременно, используя TcpClient и Tcplistner. - PullRequest
0 голосов
/ 01 апреля 2012

Я пытаюсь создать программу «Сервер \ Клиент», которая позволяет одновременно передавать несколько файлов между моим ноутбуком и домашним компьютером. Моя программа прекрасно работает, когда отправляете один файл; однако, когда я пытаюсь отправить несколько файлов одновременно в разных потоках, это не работает (я не получаю никакого файла на сервере)

вот что я сделал

foreach (string file in FilesCollection)
{
    Thread Thr = new Thread(ParameterizedThreadStart(Send));
    Thr.Start(file);
}

это отправляющая часть

    private void Send(string location)
    {
        TcpClient MyClient = null;
        FileStream MyFileStream = null;
        byte[] MyBuffer = null;
        int dSize = 0;
        try
        {
            MyClient = new TcpClient("127.0.0.1", 5555);
            MyFileStream = new FileStream(location, FileMode.Open, FileAccess.Read);
            MyBuffer = new byte[1024];
            Console.WriteLine("Transfering Data...");
            while (true)
            {
                try
                {
                    dSize = MyFileStream.Read(MyBuffer, 0, MyBuffer.Length);
                    MyClient.GetStream().Write(MyBuffer, 0, dSize);
                    if (dSize == 0)
                        break;
                }
                catch (Exception er)
                {
                    Console.WriteLine(er.Message);
                }
            }
            MyFileStream.Close();
            MyClient.Close();
            MyBuffer = null;
            Console.WriteLine("Transfer Complete");
        }
        catch (Exception er)
        {
            Console.WriteLine(er.Message);
        }
   }

и это приемная часть

private void Receive(string location)
{
    TcpClient MyClient = null;
    FileStream MyFileStream = null;
    byte[] MyBuffer = null;
    int dSize = 0;
    try
    {
        MyClient = MyListener.AcceptTcpClient();
        Console.WriteLine("Connection Made");
        MyFileStream = new FileStream(location, FileMode.Create, FileAccess.Write);
        MyBuffer = new byte[4096];
        while (true)
        {
            dSize = MyClient.GetStream().Read(MyBuffer, 0, MyBuffer.Length);
            MyFileStream.Write(MyBuffer, 0, dSize);
            if (dSize == 0)
                break;
        }
        MyFileStream.Close();
        MyClient.Close();
        MyBuffer = null;
        Console.WriteLine("Transfer Complete");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

Может кто-нибудь сказать мне, в чем проблема, а также для клиентской стороны, должен ли я запускать tcplistner для получения файлов с сервера?

Заранее спасибо.

...