Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2014, 11:58   #1
nuka93
Новичок
Джуниор
 
Регистрация: 28.05.2014
Сообщений: 1
По умолчанию Как разбить файл при передаче по сети, протокол UDP C#

Исходник передает файлы размером до 16 Кб, как разбить большие файлы на куски при отправке и как их собрать потом при получении? подскажите кто что знает.
Сервер:
Код:
    private static void SendFile()
    {
        // Создаем файловый поток и переводим его в байты
        long a;
        Byte[] bytes = new Byte[fs.Length];
        long f_count = (int)fileDet.FILESIZE / 8192;
        
        Console.WriteLine("Отправка файла размером " + fs.Length + " байт");
        if (fs.Length > 8192)
        {
            byte[] buffer = new byte[fs.Length];
       
            while (true)
            {
                try
                {
                    a = fs.Read(buffer, 0, buffer.Length);
                    if (a == 0)
                    {
                        break;
                    }
                    sender.Send(buffer, buffer.Length, endPoint);                  
                }
                catch (Exception eR)
                {
                    Console.WriteLine(eR.ToString());
                }             
            }
        }
        else 
            fs.Read(bytes, 0, bytes.Length);
        try
        {
            sender.Send(bytes, bytes.Length, endPoint);
        }
        catch (Exception eR)
        {
            Console.WriteLine(eR.ToString());
        }
        finally
        {
            fs.Close();
            sender.Close();
        }
 
       /* try
        {
            // Отправляем файл
            sender.Send(bytes, bytes.Length, endPoint);
        }
        catch (Exception eR)
        {
            Console.WriteLine(eR.ToString());
        }
        finally
        {
            // Закрываем соединение и очищаем поток
            fs.Close();
            sender.Close();
        }
        Console.WriteLine("Файл успешно отправлен.");
        Console.Read(); */
    }
}
Клиент:
Код:
    public static void ReceiveFile()
    {
        long a = 0;
        long f = (int)fileDet.FILESIZE;
        long x = fileDet.FILESIZE / 8192;
        string data = Encoding.ASCII.GetString(receiveBytes);
        if (fileDet.FILESIZE > 8192)
        {
            fs = new FileStream("temp." + fileDet.FILETYPE, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            while (true)
            {
                x--;
                try
                {
                    receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
                    if(receiveBytes != null)
                    {
                    a = a + 1;
                    }
                
                    fs.Write(receiveBytes, 0, receiveBytes.Length);
                    if (receiveBytes.Length < 8192) break;
                }
                catch (Exception eR)
                {
                    Console.WriteLine(eR.ToString());
                }
                finally
                {
                    fs.Close();
                    receivingUdpClient.Close();
                   // Process.Start("Client.exe");
                    Console.Read();      
 
                }
 
            }
        }
        else 
 
        try
        {
            Console.WriteLine("-----------*******Ожидайте получение файла*******-----------");
 
            // Получаем файл
            receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
 
            // Преобразуем и отображаем данные
            Console.WriteLine("----Файл получен...Сохраняем...");
 
            // Создаем временный файл с полученным расширением
            fs = new FileStream("temp." + fileDet.FILETYPE, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            fs.Write(receiveBytes, 0, receiveBytes.Length);
 
            Console.WriteLine("----Файл сохранен...");
 
            //Console.WriteLine("-------Открытие файла------");
 
            // Открываем файл связанной с ним программой
           // Process.Start(fs.Name); 
            
 
        }
        catch (Exception eR)
        {
            Console.WriteLine(eR.ToString());
        }
        finally
        {
            fs.Close();
            receivingUdpClient.Close();
            Process.Start("Client.exe");
            //Console.Read();      
           
        }
        
        
    }
    
}
nuka93 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поясните за UDP-протокол lawliet93 C# (си шарп) 1 15.04.2014 12:28
UDP протокол alex081993 Работа с сетью в Delphi 13 05.12.2013 01:31
UDP протокол :) Артэс Общие вопросы C/C++ 6 09.10.2012 17:46
Как остановить SendTo (UDP протокол) Dasharnb777 Общие вопросы .NET 0 23.11.2010 23:41