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