Сокеты: передача данных - C#

Узнай цену своей работы

Формулировка задачи:

И так есть сервер, и в нем прослушка для приема файлов:
Листинг программы
  1. Socket sListener;
  2. Socket fileHandler;
  3. ....
  4. fileHandler=sListener.Accept();
  5. ....
  6. ....
  7. FileStream outputStream = new FileStream("encrypt\" + outFile, FileMode.Create);
  8. fileHandler.ReceiveBufferSize = 1024; //буффер приема данных
  9. fileHandler.ReceiveTimeout = 5000; //5 сек таймаут
  10. while (true)
  11. {
  12. byte[] buffer = new byte[1024];
  13. int bytesRec = fileHandler.Receive(buffer);
  14. int currByte = bytesRec;
  15. try
  16. {
  17. while (bytesRec > 0)
  18. {
  19. outputStream.Write(buffer, 0, bytesRec);
  20. bytesRec = fileHandler.Receive(buffer);
  21. currByte += bytesRec;
  22. this.Invoke(new ReportStatus(this.ReportProgress), currByte.ToString(), fileDet.FILESIZE.ToString(), true);
  23. }
  24. }
  25. catch { } //исключение для таймаута
У клиента просто вызывается отправка файла:
Листинг программы
  1. Socket fileSender;
  2. fileSender.SendBufferSize = 1024;
  3. fileSender.SendTimeout=5;
  4. fileSender.SendFile("documents.pdf");
Но получаемый файл всегда на 1024 байта меньше от исходного, причем не приходят именно первые байты... До этого, у меня приходит сереализуемый объект с информацией клиента и информацией о передаваемом файле + ключ шифрования. С ним никаких проблем нет, десериализация проходит без ошибок, код приема идентичен, только без цикла, а буффер 64 кбайт, ибо больше 64 кбайт объект никогда не выходил. P.S. Даже если изменить буфер приема/передачи, буфер для файлового потока, все равно упускает ровно 1024 байта...

Решение задачи: «Сокеты: передача данных»

textual
Листинг программы
  1. outputStream.Write(buffer, 0, bytesRec);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут