用C# 通过FtpWebRequest 下载服务器文件。
本机运行OK,部署到客户机器上运行程序就报“无法连接到远程服务器”,但客户的IE是可以打开这个FTP地址的。
错误信息是程序跑到FtpWebResponse ftpRes = (FtpWebResponse)ftpReq.GetResponse();抛出的。
哪位大哥告知一下,弄了一天没弄好。。。
ftp分为主动模式 被动模式 还有身份验证,这个要看你的代码了。
这是代码:
Uri u = new Uri(ftpurl + filename);
string downFile = Directory + "\" + filename;
//FtpWebRequest的作成
FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(u);
//设定用户名和密码
ftpReq.Credentials = new NetworkCredential("anonymous", "");
//Method WebRequestMethods.Ftp.DownloadFile("RETR")设定
ftpReq.Method = WebRequestMethods.Ftp.DownloadFile;
//要求终了后关闭连接
ftpReq.KeepAlive = false;
//使用ASCII方式传送
ftpReq.UseBinary = true;
//设定PASSIVE方式无效
ftpReq.UsePassive = false;
ftpReq.Timeout = 60000;
//判断是否继续下载
//继续写入下载文件的FileStream
FileStream fs;
try
{
//if (File.Exists(downFile))
//{
// //继续下载
// ftpReq.ContentOffset = (new FileInfo(downFile)).Length;
// fs = new FileStream(
// downFile, FileMode.Append, FileAccess.Write);
//}
//else
//{
//一般下载
fs = new FileStream(
downFile, FileMode.Create, FileAccess.Write);
//}
//取得FtpWebResponse
ftpRes = (FtpWebResponse)ftpReq.GetResponse();
//if (ftpRes.StatusCode != FtpStatusCode.FileActionOK) //如果服务器未响应,那么继续等待相应
// continue;
//Application.DoEvents();
//为了下载文件取得Stream
Stream resStrm = ftpRes.GetResponseStream();
//写入下载的数据
byte[] buffer = new byte[1024];
while (true)
{
int readSize = resStrm.Read(buffer, 0, buffer.Length);
if (readSize == 0)
break;
fs.Write(buffer, 0, readSize);
}
fs.Close();
resStrm.Close();
//表示从FTP服务器被送信的状态
Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription);
//关闭连接
ftpRes.Close();
flag = true;
//break;
}
catch (Exception)
{
throw;
}
防火墙或者IE中设置了代理