2010-08-05 115 views
0

當我嘗試做多上傳我收到上述錯誤 在FTP我有兩個班一個是FTPdatatransfer等是FTPcommand 而在我的主法師我正在做這樣的事情錯誤:現有連接被FTP中的遠程主機強制關閉在C#中?

FTPCommand ftpcommand = new FTPCommand(ServerAddress, UserName, Password); 
ftpcommand.Login(); 
ftpcommand.sendCommand("CWD ", "/home/praveena/RMS"); 
ftpcommand.sendCommand("PASV");    

ftpcommand.sendCommand("STOR ","FTP.pdf");     
ftpcommand.sendCommand("STOR ","linux.pdf"); 
ftpcommand.sendCommand("QUIT"); 

一個上傳工作正常,而其他提供了上述錯誤

FTPCommand.cs

public void sendCommand(String command, params string[] strfilename) 
    { 


     string ServerAddress = "172.24.18.240"; 
     string UserName = "praveena"; 
     string Password = "praveena"; 


     if (command == "STOR ") //Uploading to Server 
     { 

      FTPDataTransfer ftpdatatransfer = new FTPDataTransfer(ServerAddress, UserName, Password, 10000, iport);    
      foreach (string dir in strfilename) 
      { 
       command = "STOR " + strfilename[0]; 
      } 

      Send(command);     
      ftpdatatransfer.Upload(strfilename[0]);     
      this.readResponse(); 

     } 
     else if (command == "MKD ") 
     { 
      command = "MKD " + strfilename[0]; 
      Send(command); 
      this.readResponse(); 
     } 

     else if (command == "CWD ") 
     { 
      command = "CWD " + strfilename[0]; 
      Send(command); 
      this.readResponse(); 
     } 

     else if (command == "NLST ") //Listing Files from Server. 
     { 
      FTPDataTransfer ftpdatatransfer = new FTPDataTransfer(ServerAddress, UserName, Password, 10000, iport); 
      foreach (string dir in strfilename) 
      { 
       command = "NLST " + "*"; 
      } 
      Send(command); 
      ftpdatatransfer.GetFilelist(); 
      this.readResponse(); 

     } 
     else 
     { 

      Send(command); 
      this.readResponse(); 
      if (command == "PASV") 
      { 
       iport = GetPort(); 
      } 


     } 


    } 



    public void Send(string command) 
    { 
     Byte[] cmdBytes = Encoding.ASCII.GetBytes((command + "\r\n").ToCharArray()); 
     clientSocket.Send(cmdBytes, cmdBytes.Length, 0); 
    } 


    public int GetPort() 
    { 
     int index1 = result.IndexOf('('); 
     int index2 = result.IndexOf(')'); 

     string ipData = this.result.Substring(index1 + 1, index2 - index1 - 1); 

     int[] parts = new int[6]; 

     int len = ipData.Length; 
     int partCount = 0; 
     string buf = ""; 

     for (int i = 0; i < len && partCount <= 6; i++) 
     { 
      char ch = char.Parse(ipData.Substring(i, 1)); 

      if (char.IsDigit(ch)) 
       buf += ch; 

      else if (ch != ',') 
       throw new WinFTPClient.FTPCommand.FtpException("Malformed PASV result: " + result); 

      if (ch == ',' || i + 1 == len) 
      { 
       try 
       { 
        parts[partCount++] = int.Parse(buf); 
        buf = ""; 
       } 
       catch (Exception ex) 
       { 
        throw new WinFTPClient.FTPCommand.FtpException("Malformed PASV result (not supported?): " + this.result, ex); 
       } 
      } 
     } 


     string ipAddress = parts[0] + "." + parts[1] + "." + parts[2] + "." + parts[3]; 

     int port = (parts[4] << 8) + parts[5];   

     return port; 
    } 

FTPdatatransfer.cs

public void Upload(string strfilename) 
    { 


     Thread thread = new Thread(new ThreadStart(() => UploadFile(strfilename))); 
     thread.Start(); 




    } 

    public void UploadFile(string strfilename) 
    { 


     Socket cSocket = createDataSocket(); 

     //open stream to read file 

     FileStream input = new FileStream(strfilename, FileMode.Open); 
     while ((bytes = input.Read(buffer, 0, buffer.Length)) > 0) 
     { 
      cSocket.Send(buffer, bytes, 0); 
     } 

     input.Close(); 
     if (cSocket.Connected) 
     { 
      cSocket.Close(); 
     } 

     // this.readResponse(); 

     MessageBox.Show("File Uploaded successfully"); 

    } 

public Socket createDataSocket() 
    { 


     IPAddress ipAddress = IPAddress.Parse("172.24.18.240"); 
     Socket socket = null; 
     IPEndPoint ep = null; 


     try 
     { 
      socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      ep = new IPEndPoint(Dns.GetHostEntry(ipAddress).AddressList[0], port); 
      socket.Connect(ep); 
     } 
     catch (Exception ex) 
     { 
      // doubtfull.... 
      if (socket != null && socket.Connected) socket.Close(); 

      throw new WinFTPClient.FTPCommand.FtpException("Can't connect to remote server", ex); 
     } 

     return socket; 
    } 
+0

看起來像你從某個地方拿走了上面的代碼;我可以使用Google至少在一個地方找到它。也許如果你寫自己的代碼,你會有更好的運氣。 :)或者只是在BCL中使用'WebClient'。 – bzlm 2010-08-05 10:40:51

+0

@bzlm:謝謝。有些機構在谷歌發佈我的代碼,我不知道它。這段代碼是由我寫的。請給我提供那個鏈接,我可以找到我的代碼。 – 2010-08-05 10:48:54

回答

0

最有可能的FTP服務器正在限制同時上傳的數量。沒有辦法從客戶端強制這一點。

+0

沒有我發現上傳一個文件連接後關閉我想這就是爲什麼它不能夠上傳第二個文件。 – 2010-08-05 10:33:28

+0

啊。是的,有些服務器使用「異常關閉」,因爲它允許他們更快速地回收資源。 – 2010-08-05 11:24:24

+0

@stephen:我沒有找到你? – 2010-08-05 11:33:45

相關問題