使用C#在FTP中并行使用多个下载/上传
问题描述:
我想在不使用FTPWebRequest的情况下使用C#在FTP中并行执行多个下载/上传。 我已经写了我的自定义代码,当我尝试同时下载两个文件时,第一个获得正确下载,而第二个显示大小为0 KB(它也下载)。使用C#在FTP中并行使用多个下载/上传
public void sendCommand(String command, params string[] strfilename)
{
if (command == "RETR ") //Downloading file from Server
{
FileStream output = null;
if (!File.Exists(strfilename[0]))
output = File.Create(strfilename[0]);
else
output = new FileStream(strfilename[0] , FileMode.Open);
command = "RETR " + strfilename[0];
Byte[] cmdBytes = Encoding.ASCII.GetBytes((command + "\r\n").ToCharArray());
clientSocket.Send(cmdBytes, cmdBytes.Length, 0);
Socket csocket = createDataSocket();
DateTime timeout = DateTime.Now.AddSeconds(this.timeoutSeconds);
while (timeout > DateTime.Now)
{
this.bytes = csocket.Receive(buffer, buffer.Length, 0);
output.Write(this.buffer, 0, this.bytes);
if (this.bytes <= 0)
{
break;
}
}
// this.BinaryMode = true;
output.Close();
if (csocket.Connected) csocket.Close();
this.readResponse();
MessageBox.Show("File Downloaded successfully");
else if....so on
}
}
在我的主要方法,我这样做:
ftpcommand.sendCommand("RETR ","RMSViewer.xml"); //Downloading from Server
ftpcommand.sendCommand("RETR ","cms.xml");//Downloading from Server
任何代码片段....
答
戴维说,你需要你的ftpCommand类的单独的实例。看看使用BackgroundWorker在后台运行命令(异步)。
答
你是如何同时发出您的要求?
螺纹?
如果是这样 - 你可能想要确保你创建了你的“ftpcommand”类的单独实例。
,我认为我们需要更多的信息,能够帮助您:)
+0
雅像我想知道如何我可以创建线程上它同时requests.Sepearte实例意味着我没有得到你。 ftpcommand.sendCommand(“RETR”,“RMSViewer.xml”); //从服务器下载 ftpcommand.sendCommand(“RETR”,“cms.xml”); //从服务器下载 – 2010-07-29 12:01:22
@从服务器下载 ftpcommand.sendCommand帕特里克:那么如果有100个文件我必须创建100个instaces? – 2010-08-05 12:07:11
我怀疑你可以同时下载100个文件 - 大多数FTP服务器限制了单个IP可以进行的连接数量(以防止单个人超负荷服务器)。您的原始问题是关于同时下载两个文件通过您的ftpCommand类和两个BackgroundWorker类的两个不同实例,它是可行的。 – PatrickSteele 2010-08-05 12:14:43
@Patrick:2个实例?你能告诉我在上面的代码中创建2个实例的位置。谢谢。 – 2010-08-05 12:44:47