Передача файла через сокет - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д