我只是想下载' n'同时使用ftp服务器的文件。我的代码如下......
每次运行此代码时,只会下载一个文件,然后在GetResponse()行中引发异常:
远程服务器返回错误:(501)参数或参数中的语法错误。
class main{
public static void main(){
Multiple_File_Downloader MFD= new Multiple_File_Downloader();
MFD.Multi_Thread(); }
}
class Multiple_File_Downloader
{
public void Multi_Thread()
{
Thread a = new Thread(new ThreadStart(() => Downloadfile("7.jpg")));
Thread b = new Thread(new ThreadStart(() => Downloadfile("8.jpg")));
a.IsBackground = true;
b.IsBackground = true;
a.Start();
b.Start();
}
public void Downloadfile(string _filename)
{
string localPath = @"E:\FTPTrialPath\";
FtpWebRequest requestFileDownload = (FtpWebRequest)WebRequest.Create("ftp://url/" + _filename);
requestFileDownload.Credentials = new NetworkCredential("Login","password");
requestFileDownload.Method = WebRequestMethods.Ftp.DownloadFile;
requestFileDownload.UsePassive = true;
using(FtpWebResponse responseFileDownload = (FtpWebResponse)requestFileDownload.GetResponse()) //<<< ERROR HERE...
{
Stream responseStream = responseFileDownload.GetResponseStream();
FileStream writeStream = new FileStream(localPath + _filename, FileMode.Create);
int Length = 2048;
Byte[] buffer = new Byte[Length];
int bytesRead = responseStream.Read(buffer, 0, Length);
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = responseStream.Read(buffer, 0, Length);
}
}
requestFileDownload = null;
}
}
是否可以在不干扰其他线程参数的情况下这样做? 感谢Advance中的帮助:)
答案 0 :(得分:0)
每次调用方法时,它都有自己的一组参数,这些参数仅适用于该方法调用。
除非你
ref
keyword)...在多个线程中运行相同的方法没有问题。
在您的代码中,您创建了两个不同的字符串,这些字符串只能由&#34;方法实例访问&#34;你把它传给了。
答案 1 :(得分:0)
您的问题与并发访问无关。您的代码完全是线程安全的。
我看到两个可能的问题:
您不必等待线程完成。您的申请突然中止。例外可能只是该中止的副作用。
使用Thread.Join
等待线程在Multi_Thread
方法结束时完成:
a.Join();
b.Join();
由于缺少可用端口,服务器可能会出现多个并行传输问题。您是否使用独立的FTP客户端测试来自同一服务器的并行传输?