C# &引用;ftp中的操作已超时;从服务器下载网络速度较慢的zip文件时发生此错误

C# &引用;ftp中的操作已超时;从服务器下载网络速度较慢的zip文件时发生此错误,c#,ftp,C#,Ftp,我正在使用ftp从服务器下载一个zip文件(大小10 MB到70 MB),这是一个完美的下载,但是,当网络速度较慢时,ftp中的错误操作超时显示为,然后出现捕获(异常示例),因为下载()被再次调用,因此它会一次又一次地重新下载 此项目是在.NET framework 4.0中创建的 我增加了ftpWebRequest.Timeout=6000的时间但仍然不起作用 public void下载(string localDirectory、string localFilename、string rem

我正在使用ftp从服务器下载一个zip文件(大小10 MB到70 MB),这是一个完美的下载,但是,当网络速度较慢时,ftp中的错误
操作超时显示为
,然后出现
捕获(异常示例)
,因为
下载()
被再次调用,因此它会一次又一次地重新下载

此项目是在.NET framework 4.0中创建的

我增加了
ftpWebRequest.Timeout=6000的时间但仍然不起作用

public void下载(string localDirectory、string localFilename、string remoteDirectory、string remoteFileName)
{
字符串client_path=path.GetDirectoryName(path.GetDirectoryName(path.GetDirectoryName(localDirectory));
字符串appPath=System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutionGassembly().Location);
字符串configFile=System.IO.Path.Combine(appPath,“PACS.exe.config”);
ExeConfigurationFileMap configFileMap=新建ExeConfigurationFileMap();
configFileMap.ExeConfigFilename=configFile;
System.Configuration.Configuration config=ConfigurationManager.OpenMappedExeConfiguration(configFileMap,ConfigurationUserLevel.None);
config.AppSettings.Settings[“客户端路径”]。Value=客户端路径;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(“应用设置”);
string str=Path.Combine(localDirectory,localFilename);
FileInfo FileInfo=新的FileInfo(str);
FileStream FileStream=(FileStream)null;
WebException;
尝试
{
字符串path=path.GetDirectoryName(path.GetDirectoryName(remoteDirectory));
字符串path1=Path.GetDirectoryName(Path.GetDirectoryName(localDirectory));
WebRequest sizeRequest=WebRequest.Create(“ftp://“+”IP“+”:“+”端口“+”/“+”C:\\KINSOLUTIONS\\Team\\Images\\1“+”.zip”);
凭据=(ICredentials)新网络凭据(“用户名”、“密码”);
sizeRequest.Method=WebRequestMethods.Ftp.GetFileSize;
int size=(int)sizeRequest.GetResponse().ContentLength;
FtpWebRequest FtpWebRequest=WebRequest。创建(新Uri(“ftp://“+”IP“+”:“+”端口“+”/“+”C:\\KINSOLUTIONS\\Team\\Images\\1“+”.zip”)作为FtpWebRequest;
ftpWebRequest.Credentials=(ICredentials)新网络凭据(“用户名”、“密码”);
ftpWebRequest.UsePassive=true;
ftpWebRequest.Timeout=6000;
ftpWebRequest.KeepAlive=false;
ftpWebRequest.Method=“RETR”;
ftpWebRequest.UseBinary=true;
fileStream=newfilestream(路径1+“.zip”,FileMode.Create,FileAccess.Write,FileShare.ReadWrite);
使用(Stream responseStream=(ftpWebRequest.GetResponse()作为FtpWebResponse.GetResponse())
{                   
字节[]缓冲区=新字节[32768];
int count=responseStream.Read(缓冲区,032768);
long num=(long)计数;
int post=0;
while(size!=post | | count!=0)
{
bool result=System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
而(!结果)
{
结果=System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
如果(结果)
{
fileStream.Close();
下载(localDirectory、localFilename、remoteDirectory、remoteFileName);
}
}
写入(缓冲区,0,计数);
count=responseStream.Read(缓冲区,032768);
int position=(int)fileStream.position;
num+=(长)计数;
职位=职位;
}
fileStream.Close();
}
}
捕获(WebException ex)
{
if(fileStream!=null)
fileStream.Close();
下载(localDirectory、localFilename、remoteDirectory、remoteFileName);
}
最后
{
if(fileStream!=null)
fileStream.Close();
}
}

在慢速网络中下载zip文件是否还有其他选项?

将超时时间设置为6秒以上?将keepalive设置为true?keepalive对于下载单个文件几乎没有帮助。虽然设置更长的超时时间会有所帮助。从以下内容中删除计数:而(size!=post | | count!=0)FTP/http使用TCP作为传输层。TCP可以有一个KeepAlive消息,您可以在其中接收零字节的消息。当网络速度慢时,你可以得到零字节的激活,然后在下载的中间停止。或者更好的是,不要重新发明轮子,使用一些标准的(更简单的)代码: