C# 将TCPClient与原始FTP一起使用以检索文件

C# 将TCPClient与原始FTP一起使用以检索文件,c#,ftp,tcpclient,C#,Ftp,Tcpclient,尝试使用TCPClient和原始FTP检索文件时,我收到以下消息: 425未能建立连接 我使用以下方式连接: using (TcpClient client = new TcpClient("ServerName", 21)) using (NetworkStream stream = client.GetStream()) using (StreamReader reader = new StreamReader(stream)) using (StreamWriter writer = ne

尝试使用TCPClient和原始FTP检索文件时,我收到以下消息:

425未能建立连接

我使用以下方式连接:

using (TcpClient client = new TcpClient("ServerName", 21))
using (NetworkStream stream = client.GetStream())
using (StreamReader reader = new StreamReader(stream))
using (StreamWriter writer = new StreamWriter(stream))
{
然后我使用
USER****
PASS***
登录到服务器。我使用
CWD/***/***
设法切换到正确的目录,如前所述,所有这些都可以正常工作,并且我得到了预期的响应消息

但是,当下面的代码执行时,我只收到上面提到的消息

lineToSend = "PASV";
Program.logger.Add("Sending to server: " + lineToSend, 1);
writer.WriteLine(lineToSend);
while (!stream.DataAvailable)
{
    Program.logger.Add(stream.DataAvailable.ToString(), 1);
    Program.logger.Persist();
    Thread.Sleep(1000);

}
lineWeRead = reader.ReadLine();
Program.logger.Add("Received from server: " + lineWeRead, 1);
Program.logger.Persist();

lineToSend = "RETR file.txt";
Program.logger.Add("Sending to server: " + lineToSend, 1);
writer.WriteLine(lineToSend);
while (!stream.DataAvailable)
{
    Program.logger.Add(stream.DataAvailable.ToString(), 1);
    Program.logger.Persist();
    Thread.Sleep(1000);
}

Program.logger.Add("Loop Exited: " + stream.DataAvailable.ToString(), 1);
Program.logger.Persist();
lineWeRead = reader.ReadLine();
Program.logger.Add("Received from server: " + lineWeRead, 1);
Program.logger.Persist();
我对C#NET相当陌生,有人专门要求我使用这种连接方法,而不是httpWebRequest


我试图接收的文件是一个只包含“GetThisMessage”的文本文件,但使用时会更大。非常感谢您的帮助。

您可能需要了解FTP协议。这不是一种联系,而是两种联系。我在代码中没有看到任何数据连接,这可能就是425的来源


我同意这一评论——除非这是一个家庭作业式的问题,否则请不要在这里重新发明轮子。FTP很臭,这个问题已经解决了。

为什么不能使用
FtpWebRequest
?除非这是家庭作业,否则请告诉询问您的人,重新发明轮子是没有意义的。+1如果您确实计划使用TcpClient,则FTP主动模式需要一个额外的套接字或TcpListener对象,FTP被动模式需要另一个TcpClient或Socket对象。