Передача файла через сокет - C#
Формулировка задачи:
Итак... у меня сложилась одна затруднительная ситуация. Есть сервер, есть клиент. С передает К файл посредством
клиент принимает
в итоге получаем файл с большим размером, чем оригинал... ну ладн, это несложно преодолеть написав
получаем на выходе файл аналогичного размера, что и оригинал, НО он не запускается. Если же сделать буфер равный 1 байту, то на выходе получается рабочий файл. Но это цикл на 4 млн проходов при файле в 4 мб. это нехорошо...
Может кто объяснить почему так? И как исправить эту проблему.
Если честно сутки просидел над этими 10 строчками кода, но так и не понял почему файл получается нерабочим во 2 варианте
client.SendFile(filename, null, null, TransmitFileOptions.UseDefaultWorkerThread);
MemoryStream memstr = new MemoryStream();
FileStream fs = File.Create(package_name);
while (true)
{
buffer = new byte[4096];
int o = server.Receive(buffer);
if (o == 0)
{
break;
}
memstr.Write(buffer, 0, buffer.Length);
}
memstr.WriteTo(fs);
fs.Close();
memstr.Close();// size - это размер файла
MemoryStream memstr = new MemoryStream();
FileStream fs = File.Create(package_name);
long received = 0;
while (true)
{
if (received + 4096 > size)
{
buffer = new byte[size-received];
server.Receive(buffer);
memstr.Write(buffer, 0, buffer.Length);
break;
}
buffer = new byte[4096];
server.Receive(buffer);
received = received + 4096;
memstr.Write(buffer, 0, buffer.Length);
}
memstr.WriteTo(fs);
fs.Close();
memstr.Close();MemoryStream memstr = new MemoryStream();
FileStream fs = File.Create(package_name);
while (true)
{
buffer = new byte[1];
int o = server.Receive(buffer);
if (o == 0)
{
break;
}
memstr.Write(buffer, 0, buffer.Length);
}
memstr.WriteTo(fs);
fs.Close();
memstr.Close();Решение задачи: «Передача файла через сокет»
textual
Листинг программы
file.Write(data, 0, recv);