Stellen Sie den Port-Nummer, wenn Sie mit FtpWebRequest in C#
Bekomme ich immer eine exception wenn ich versuche auf FTP zu meinem Win 2008 Server von C# - code mit VS2008 als debugger.
Meine Testklasse sieht wie folgt aus:
public class FTP
{
private string ftpServerIP = "192.168.10.35:21";
private string ftpUserID = "Administrator";
private string ftpPassword = "XXXXXXXX";
private string uploadToFolder = "uploadtest";
public void Upload(string filename)
{
FileInfo fileInf = new FileInfo(filename);
string uri = "ftp://" + ftpServerIP + "/" + uploadToFolder + "/" + fileInf.Name;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = fileInf.Length;
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
FileStream fs = fileInf.OpenRead();
try
{
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
while (contentLen != 0)
{
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
strm.Close();
fs.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
Wenn ich den code auszuführen bekomme ich Fehler beim verbinden mit FTP-Fehler 227 in der GetRequestStream () - Aufruf.
In der Ausnahme kann ich sehen, dass die Verbindung fehlschlägt: 192.168.10.35:52184
Ich habe keine Ahnung, wie es mit port 52184.
Ich geben in der ftpServerIP, dass es sein sollte port 21.
Ich habe ein paar Personen mit dem gleichen Problemen auf google, aber ich habe nicht gefunden, ein gutes Beispiel, wie dies gelöst ist und ich immer noch nicht verstehen, warum es passiert.
Jemand wissen, wie damit umgehen??
UPDATE:
Habe ich versucht, eine Verbindung zu einem anderen FTP-account und es hat alles Prima funktioniert. Also getestet habe ich meine 192.168.10.35:21 FTP, aber es funktioniert gut in CuteFTP Pro und der gleichen.
Dies macht es nur noch seltsamer..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Vermutung wäre die Windows-firewall Fragen, FTP verwendet andere ports als nur port 21 - manchmal ändern die FTP-Modus von aktiv zu passiv hilft, um die Dinge zu arbeiten.
Blick auf dieses gute Artikel auf FTP: Active FTP vs. Passive FTP, a Definitive Explanation
Thies hat es hinbekommen, es hatte damit zu tun, passiv-Modus
Den fix in den code ist so wahnsinnig einfach ist 🙂
Und es funktionierte schnell und ohne Fehler!
Ist es wichtig zu unterscheiden, der BEFEHL port und DATA-port. Die Verbindung Protokoll wird auch ändern, je nachdem, ob Sie im AKTIVEN oder PASSIVEN Modus.
AKTIV-MODUS :
1) Der client initiiert eine Verbindung von einem zufälligen unbekannter BEFEHL-Hafen (N > 1023) Standard server COMMAND port (21). Der client angeben, seinem DATA-port (N+1) und lauscht auf diesem port.
2.) Der server selbst eine Verbindung initiieren von seinem Standard-DATEN-port (20) des angegebenen client-DATA-port (N+1).
PASSIV-MODUS :
1) Der client initiiert eine Verbindung von einem zufälligen unbekannter BEFEHL-Hafen (N > 1023) Standard server COMMAND port (21) mit den PASSIVEN Befehl. Die server öffnen einen zufälligen DATEN-port (P > 1023) und senden Sie es an den client.
2) Der client initiiert eine Verbindung von seinem DATA-port (N+1) an den angegebenen server-DATEN-port (P > 1023).
Wenn Sie mit AKTIV-Modus, werden Sie wahrscheinlich benötigen, um Ihre client-firewall akzeptieren der Verbindung vom server auf Ihren port (N+1 > 1024).
In Ihrem Beispiel, Sie waren in den ACTIVE-Modus. Ihr client eine Verbindung initiiert von seinem BEFEHL port (52183) auf dem server die default COMMAND-port (21) angegeben und seine DATEN-port (52184 = 52183 + 1). Dann wird der server initiiert eine Verbindung aus der Standard-DATEN-port (20) zu dem client-DATEN-port (52184), die wurde wahrscheinlich abgelehnt, durch die client-firewall.
Ich hoffe, das hilft, Ihr problem zu lösen!