Wie verwenden Sie Passiv-Modus in FtpWebRequest & fix PASV-Fehler in .Net 3.5 & Definieren Sie die port-range von codes

finden Sie in meinem windows-form-codes erste :

        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Windows.Forms;

        namespace my_prog
        {
            public partial class Form1 : Form
            {
                public Form1()
                {
                    InitializeComponent();
                }
                string ftp_username = "goodzilla_user";
                string ftp_password = "goodzilla_pass";
                string ftp_remote_host = @"ftp://11.11.111.11";

                private void Form1_Load(object sender, EventArgs e)
                {
                    UploadFile("d:\\test.txt", ftp_remote_host + @"/test.txt", ftp_username, ftp_password);
                }

                #region UploadFile Method

                ///<summary>
                ///Methods to upload file to FTP Server
                ///</summary>
                ///<param name="_FileName">local source file name</param>
                ///<param name="_UploadPath">Upload FTP path including Host name</param>
                ///<param name="_FTPUser">FTP login username</param>
                ///<param name="_FTPPass">FTP login password</param>
                ///
                public void UploadFile(string _FileName, string _UploadPath, string _FTPUser, string _FTPPass)
                {
                    System.IO.FileInfo _FileInfo = new System.IO.FileInfo(_FileName);

                    //Create FtpWebRequest object from the Uri provided
                    System.Net.FtpWebRequest _FtpWebRequest = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(new Uri(_UploadPath));

                    //Provide the WebPermission Credintials
                    _FtpWebRequest.Credentials = new System.Net.NetworkCredential(_FTPUser, _FTPPass);

                    //By default KeepAlive is true, where the control connection is not closed
                    //after a command is executed.
                    _FtpWebRequest.KeepAlive = false;

                    //set timeout for 20 seconds
                    _FtpWebRequest.Timeout = 20000;

                    //Specify the command to be executed.
                    _FtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile;

                    //Specify the data transfer type.
                    _FtpWebRequest.UseBinary = true;

                    //Notify the server about the size of the uploaded file
                    _FtpWebRequest.ContentLength = _FileInfo.Length;

                    //The buffer size is set to 2kb
                    int buffLength = 2048;
                    byte[] buff = new byte[buffLength];

                    //Opens a file stream (System.IO.FileStream) to read the file to be uploaded
                    System.IO.FileStream _FileStream = _FileInfo.OpenRead();

                    try
                    {
                        //Stream to which the file to be upload is written
                        System.IO.Stream _Stream = _FtpWebRequest.GetRequestStream();

                        //Read from the file stream 2kb at a time
                        int contentLen = _FileStream.Read(buff, 0, buffLength);

                        //Till Stream content ends
                        while (contentLen != 0)
                        {
                            //Write Content from the file stream to the FTP Upload Stream
                            _Stream.Write(buff, 0, contentLen);
                            contentLen = _FileStream.Read(buff, 0, buffLength);
                        }

                        //Close the file stream and the Request Stream
                        _Stream.Close();
                        _Stream.Dispose();
                        _FileStream.Close();
                        _FileStream.Dispose();

                        MessageBox.Show("Done");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Upload Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }

                #endregion

            }
        }

ich bin mit UploadFile Methode zum hochladen meiner Daten auf meinem windows server 2008 r2 server.

diese codes in .net 4 funktioniert perfekt, und mein problem ist, über .net 3.5.

in .net 3.5 bekam ich diese Fehlermeldung :

"Der server lieferte eine Adresse in der Antwort auf den PASV-Befehl, der
ist anders als die Adresse, auf die der FTP-Verbindung hergestellt wurde."

folgenden Gründen Mach ich n ' T verwenden möchten active mode :

  1. wie Sie wissen passiv-Modus ist besser, die active-Modus für
    Konnektivität...

  2. wenn ich mit aktiv-Modus .net 3.5 und
    drehen Sie den Proxy-Software auf bekam ich den folgenden Fehler :

"Die zugrunde liegende Verbindung wurde geschlossen: Der server verpflichtet, ein Protokoll
Verletzung."

aber .net 4 kein problem damit hat, dass Proxy-Software und passiven Modus und ich kann nicht wechseln .net 4, weil meine Benutzer...

so wie ich das beheben kann passiv-Modus-Fehler in .net 3.5?

in jedem thread in stack Leute sagen, verwenden Sie einfach :

    _FtpWebRequest.UsePassive = false;    

und das ist nicht meine Antwort!

Hinweis : firewall in server und client ist aus


Die ANDERE FRAGE IST :

ist es möglich, zu definieren, port-range von pssive Modus durch codes?

ich habe diese Frage in diesem thread, weil ich dachte, dadurch, dass wir das beheben können, die PASV-Fehler und helfen passiv-Modus zu tun, ist es Arbeit schneller...



EDIT :

ich fand den thread unten & ich glaube, ich habe die situation in Antwort #2,

ftp-problem

ich habe zwei Netzwerkkarten in meinem server und die ip der einzelnen innen-server ist wie 192.168.5.?? & 192.168.5.??

aber meine zwei öffentliche ip-Adressen unterschiedlich sind.

so wie ich das beheben kann, dass Fehler durch ändern etwas in meine codes oder in meinem windows-server-2008-r2 VPS und warum dieser Fehler erscheint nur in .net 3.5 und .net 4 wir haben Sie nicht?

ich habe vollen Zugriff auf meinen server und ändern können, alles, was notwendig ist.

vielen Dank im Voraus

InformationsquelleAutor SilverLight | 2014-01-09
Schreibe einen Kommentar