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

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

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

И так есть сервер, и в нем прослушка для приема файлов:
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");
Но получаемый файл всегда на 1024 байта меньше от исходного, причем не приходят именно первые байты... До этого, у меня приходит сереализуемый объект с информацией клиента и информацией о передаваемом файле + ключ шифрования. С ним никаких проблем нет, десериализация проходит без ошибок, код приема идентичен, только без цикла, а буффер 64 кбайт, ибо больше 64 кбайт объект никогда не выходил. P.S. Даже если изменить буфер приема/передачи, буфер для файлового потока, все равно упускает ровно 1024 байта...

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

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

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


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

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

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