Исходник передает файлы размером до 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();
}
}
}