Сокеты: передача данных - 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);