STOR命令破坏与FTP服务器

时间:2017-04-17 17:56:29

标签: c# ftp

我正在用C#编写FTP客户端。我输入了将文件上传到FTP服务器的方法,文件上传确实有效。但是,在成功传输数据后,客户端将与服务器断开连接。以下是我要做的步骤:  1.使用PASV从服务器获取IP和端口。  2.使用IP和端口与服务器建立DATA连接。  3.将文件转换为字节并通过DATA连接发送。  4.通过COMMAND连接发送STOR

我的问题是为什么我会断开连接。

public void PrepareUpload() // Get IP and Port from server by using PASV.
        {
            String answer;
            String message = "PASV\r\n";
            Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
            this.ns.Write(data, 0, data.Length);      
            answer = Response(this.ns);
            this.dataPort = getPort(answer, 4) * 256 + getPort(answer, 5);
        }

public void DataConnect(string server) // Create DATA connection with server using IP and port.
        {
            int port = this.dataPort;
            this.dataConnection = new TcpClient();
            IPAddress ipAddress = Dns.GetHostEntry(server).AddressList[0];

            this.dataConnection.Connect(ipAddress, port);
            this.nds = dataConnection.GetStream();  
        }

public void DataTransfer(string filename) // Convert file to bytes and send through DATA connection.
        {
            byte[] data = System.IO.File.ReadAllBytes(filename);
            this.filename = Path.GetFileName(filename);
            nds.Write(data, 0, data.Length);
        }

public void Upload() // Send STOR through COMMAND connection
        {
            String message = "STOR " + this.filename + "\r\n";
            Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
            this.ns.Write(data, 0, data.Length);
        }

1 个答案:

答案 0 :(得分:1)

您描述的顺序是错误的。特别是在发出指定传输数据(即STOR)应该发生什么的命令之前,不应该开始数据传输。正确的顺序是:

  1. 使用PASV或PORT命令确定数据端口并获取对此命令的响应。如果PORT侦听给定的IP:端口。
  2. 发送STOR命令并阅读回复。这应该是一个初步的回应(150)。
  3. 创建数据连接:PASV连接到远程主机,PORT等待传入连接。
  4. 传输数据并关闭数据连接。
  5. 等待最终回复(226)。