我正在用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);
}
答案 0 :(得分:1)
您描述的顺序是错误的。特别是在发出指定传输数据(即STOR)应该发生什么的命令之前,不应该开始数据传输。正确的顺序是: