コード例 #1
0
        // Протокол получения файла.
        public void Receiving(string s)
        {
            // Обработанное входящее сообщение.
            Messages.Message mess = new FilePartMessage(string.Empty);
            // Сообщение содержащее имя.
            RequestMessage name;
            // Уведомительное сообщение.
            ResponseMessage response = new ResponseMessage("Response");
            // Буффер для получения ответа.
            byte[] pack = new byte[1024];

            // Выделение пути к файлу.
            string path = Path.Combine(cl_path, s);
            // Выделение потоков для получения файла.
            using (FileStream outFile = File.Open(path, FileMode.Create, FileAccess.Write, FileShare.None))
            using (NetworkStream stream = clnt.GetStream())
            {
                name = new RequestMessage(s);
                // Отправка имени.
                NW.Send(name, stream);
                do
                {
                    // Получение части файла.
                    mess = NW.Recieve(stream);

                    // Проверка на завершение скачивания.
                    if (!(mess is EndMessage))
                    {
                        // Запись в файл.
                        outFile.Write(mess.Get_Info(), 0, mess.Get_Info().Length);
                        // Отправка уведомления.
                        NW.Send(response, stream);
                    }

                } while (!(mess is EndMessage));

                // Отчет об успешном скачивании.
                MessageBox.Show("Downloading is complete!", "Complete", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }