соединение прервано: непредвиденная ошибка приема FTP C # - PullRequest
0 голосов
/ 14 апреля 2020

Я использую этот код для загрузки через FTP

 try
        {
            //const string url = ficFTP;
            string url = ficFTP;
            NetworkCredential credentials = new NetworkCredential(user, pass);

            // Query size of the file to be downloaded
            WebRequest sizeRequest = WebRequest.Create(url);                
            sizeRequest.Credentials = credentials;
            sizeRequest.Method = WebRequestMethods.Ftp.GetFileSize;                
            long size = (long)sizeRequest.GetResponse().ContentLength;                
            long sizeKb = size / 1024;

            progressBar1.Invoke(
                (MethodInvoker)(() => progressBar1.Maximum = Convert.ToInt32(sizeKb)));

            // Download the file
            WebRequest request = WebRequest.Create(url);
            request.Credentials = credentials;
            request.Method = WebRequestMethods.Ftp.DownloadFile;

            using (Stream ftpStream = request.GetResponse().GetResponseStream())
            using (Stream fileStream = File.Create(dirLocal))
            {
                byte[] buffer = new byte[10240];
                int read;
                while ((read = ftpStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    fileStream.Write(buffer, 0, read);
                    long position = (long)fileStream.Position;
                    long positionKb = position / 1024;
                    progressBar1.Invoke(
                        (MethodInvoker)(() => progressBar1.Value = Convert.ToInt32(positionKb)));
                }
            }
            lblDescarga.Text = "¡Descargado!";

        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }

Я загружаю файл, который весит 4 ГБ, проблема в том, что когда программное обеспечение загрузило 3,22 ГБ, оно выдает эту ошибку

соединение прервано: неожиданный прием

Может ли быть какая-то проблема с открытым временем соединения с сервером? Есть ли решение этой проблемы? Я расследовал, но не могу найти решение.

Я надеюсь, что вы можете дать мне идею. Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

3,32 ГБ означает, что клиент использует 32-разрядную операционную систему или систему хранения (fat32). Попробуйте скопировать большой файл другим способом на dis c, просто чтобы быть уверенным.

0 голосов
/ 15 апреля 2020

Все виды сетевых подключений по своей природе ненадежны и в любой момент могут выйти из строя.

Если загрузка завершается с ошибкой ровно 3,22 ГБ, это указывает на программную ошибку, а не на общую ненадежность. Однако может быть трудно сказать, если проблема на сервере или клиенте. Насколько я могу судить, клиентский код выглядит разумно, поэтому это может быть проблема с сервером.

Один из способов решения этой проблемы - это переподключиться к серверу и использовать Seek для перехода на место в потоке произошел сбой и возобновите копирование. Однако не все потоки поддерживают поиск, поэтому я не знаю, сработает ли это в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...