我创建了一个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;
如何正确关闭/断开连接?我忘了什么吗?
答案 0 :(得分:10)
尝试将FtpWebRequest.KeepAlive属性设置为false。如果KeepAlive
设置为false,则在请求完成时将关闭与服务器的控制连接。
ftpWebRequest.KeepAlive = false;
答案 1 :(得分:1)
您是否尝试将回复包装在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();
}