如何使用FtpWebRequest正确断开FTP服务器

本文关键字:断开 FTP 服务器 何使用 FtpWebRequest | 更新日期: 2023-09-27 18:06:52

我创建了一个ftp客户端,它在一天中多次连接以从ftp服务器检索日志文件。

问题是,几个小时后,我从FTP服务器得到一个错误消息(-421会话限制达到…)。当我用netstat检查连接时,我可以看到几个与服务器的"ESTABLISHED"连接,即使我已经"关闭"了连接。

当我尝试在命令行或FileZilla上做同样的事情时,连接被正确关闭。

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + remoteFile);
ftpRequest.Credentials = new NetworkCredential(user, pass);
ftpRequest.UseBinary = true;
ftpRequest.UsePassive = true;
ftpRequest.KeepAlive = true;
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
ftpStream = ftpResponse.GetResponseStream();
FileStream localFileStream = new FileStream(localFile, FileMode.Create);
int bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
/* Resource Cleanup */
localFileStream.Close();
ftpStream.Close();
ftpResponse.Close();
ftpRequest = null;

如何正确关闭/断开连接?我忘了什么吗?

如何使用FtpWebRequest正确断开FTP服务器

尝试设置FtpWebRequest。KeepAlive属性为false。如果KeepAlive设置为false,则当请求完成时,将关闭与服务器的控制连接。

ftpWebRequest.KeepAlive = false;

您是否尝试过在using语句中包装您的响应?

using (FtpWebResponse response = request.GetResponse() as FtpWebResponse)
        {
            using (Stream responseStream = response.GetResponseStream())
            {
                using (StreamReader streamReader = new StreamReader(responseStream))
                {
                    string responseString = streamReader.ReadToEnd();
                    Byte[] buffer = Encoding.UTF8.GetBytes(responseString);
                    memoryStream = new MemoryStream(buffer);
                }
                responseStream.Close();
            }
            response.Close();
        }