Сокеты: передача данных - C#
Формулировка задачи:
И так есть сервер, и в нем прослушка для приема файлов:
У клиента просто вызывается отправка файла:
Но получаемый файл всегда на 1024 байта меньше от исходного, причем не приходят именно первые байты...
До этого, у меня приходит сереализуемый объект с информацией клиента и информацией о передаваемом файле + ключ шифрования. С ним никаких проблем нет, десериализация проходит без ошибок, код приема идентичен, только без цикла, а буффер 64 кбайт, ибо больше 64 кбайт объект никогда не выходил.
P.S. Даже если изменить буфер приема/передачи, буфер для файлового потока, все равно упускает ровно 1024 байта...
Листинг программы
- Socket sListener;
- Socket fileHandler;
- ....
- fileHandler=sListener.Accept();
- ....
- ....
- FileStream outputStream = new FileStream("encrypt\" + outFile, FileMode.Create);
- fileHandler.ReceiveBufferSize = 1024; //буффер приема данных
- fileHandler.ReceiveTimeout = 5000; //5 сек таймаут
- while (true)
- {
- byte[] buffer = new byte[1024];
- int bytesRec = fileHandler.Receive(buffer);
- int currByte = bytesRec;
- try
- {
- while (bytesRec > 0)
- {
- outputStream.Write(buffer, 0, bytesRec);
- bytesRec = fileHandler.Receive(buffer);
- currByte += bytesRec;
- this.Invoke(new ReportStatus(this.ReportProgress), currByte.ToString(), fileDet.FILESIZE.ToString(), true);
- }
- }
- catch { } //исключение для таймаута
Листинг программы
- Socket fileSender;
- fileSender.SendBufferSize = 1024;
- fileSender.SendTimeout=5;
- fileSender.SendFile("documents.pdf");
Решение задачи: «Сокеты: передача данных»
textual
Листинг программы
- outputStream.Write(buffer, 0, bytesRec);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д