【问题标题】:Using TCPClient with RAW FTP to retrieve file使用 TCPClient 和 RAW FTP 来检索文件
【发布时间】:2015-01-09 05:02:50
【问题描述】:

我在尝试使用 TCPClient 和 RAW 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。

我尝试接收的文件是一个仅包含“获取此消息”的文本文件,但使用时会更大。非常感谢任何帮助。

【问题讨论】:

  • 为什么不能使用FtpWebRequest?除非这是家庭作业,否则请告诉任何问你的人,重新发明轮子是没有意义的。

标签: c# ftp tcpclient


【解决方案1】:

您可能需要阅读 FTP 协议。没有一个连接,而是两个。我在您的代码中的任何地方都看不到数据连接,这可能是 425 的来源。

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

【讨论】:

  • +1 如果你真的打算使用 TcpClient,你需要一个额外的 Socket 或 TcpListener 对象用于 FTP 主动模式,或者另一个 TcpClient 或 Socket 对象用于 FTP 被动模式。
猜你喜欢
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2011-05-26
相关资源
最近更新 更多