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