C# 使用C语言实现FTP中的多个并行下载/上传

C# 使用C语言实现FTP中的多个并行下载/上传,c#,C#,我想使用C在FTP中并行执行多个下载/上载,而不使用FTPWebRequest。 我已经编写了我的自定义代码,当我尝试同时下载两个文件时,第一个文件可以正常下载,而第二个文件显示大小为0 KBit也可以下载 public void sendCommand(String command, params string[] strfilename) { if (command == "RETR ") //Downloading file from Server {

我想使用C在FTP中并行执行多个下载/上载,而不使用FTPWebRequest。 我已经编写了我的自定义代码,当我尝试同时下载两个文件时,第一个文件可以正常下载,而第二个文件显示大小为0 KBit也可以下载

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类的单独实例


我认为我们需要更多信息来帮助您:

正如Dave所说,您需要单独的ftpCommand类实例。研究使用BackgroundWorker在后台异步运行命令。

我想知道如何在其上创建线程以同时请求。separate实例意味着我没有得到您的支持。我像这样使用ftpcommand.sendCommandRETR、RMSViewer.xml//从服务器ftpcommand.sendCommandRETR、cms.xml下载//从下载Server@Patrick:因此,如果有100个文件,我必须创建100个Instance?我怀疑您是否能够同时下载100个文件-大多数FTP服务器限制单个IP可以进行的连接数,以防止单个用户过载服务器。您最初的问题是关于同时下载两个文件。有了ftpCommand类的两个不同实例和几个BackgroundWorker类,这是可行的。@Patrick:2个实例?你能告诉我在我上面的代码中在哪里创建2个实例吗?谢谢。不,我不能,因为你的代码只显示了一个方法。回顾创建ftpcommand的代码。在这里,您需要创建多个实例,并让它们在单独的线程(即BackgroundWorker)上执行。@Patrick:FTPCommand FTPCommand=new-FTPCommandServerAddress,UserName,Password;ftpcommand.Login;ftpcommand.sendCommandCWD,/home/praveena/RMS;ftpcommand.sendCommandPASV//ftpcommand.sendCommandNLST*,//ftpcommand.sendCommandNLST*//目录列出ftpcommand.sendCommandSTOR,FTP.pdf;ftpcommand.sendCommandSTOR,Linux.pdf;ftpcommand.sendCommandQUIT;你的意思是说?
ftpcommand.sendCommand("RETR ","RMSViewer.xml"); //Downloading from Server
ftpcommand.sendCommand("RETR ","cms.xml");//Downloading from Server