【问题标题】:custom FTP program自定义 FTP 程序
【发布时间】:2014-06-06 20:34:39
【问题描述】:

我有一个使用 Visual Studio 2008 / C# / .Net 3.5 框架创建的 FTP 工具。

该工具可以连接 5 个不同的 FTP 服务器并下载文件没有任何问题。但是,同一工具在与另一台 FTP 服务器 (xxx) 连接时,连接失败。我检查了客户端和服务器端的防火墙异常,并且这个 IP 没有被过滤。但是,我可以通过 FileZilla / Internet Explorer / Windows Explorer 在端口 21 上使用相同的凭据连接到 xxx 服务器,它让我可以查看和下载文件。下面是建立 FTP 连接的代码。任何帮助将不胜感激。

public void Connect(string server, string user, string pass)
{
    main_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    try
    {
        main_ipEndPoint = new IPEndPoint(Dns.GetHostEntry(server).AddressList[0], 21);  // returning correct IP
    }
    catch 
    {
        main_ipEndPoint = new IPEndPoint(Dns.GetHostAddresses(server)[0], 21);   
    }

    try
    {
        main_sock.Connect(main_ipEndPoint); // failing at this line. 
    }
    catch(Exception ex)
    {
        throw new Exception(ex.Message);
    }

    return;
}

错误信息:

{System.Net.Sockets.SocketException:连接尝试失败 因为连接方在一段时间后没有正确响应 时间,或建立连接失败,因为连接的主机有 未能响应 123.192.122.1XX:21。

错误代码:10065

【问题讨论】:

  • 尝试使用 netcat 或类似工具嗅探网络,查看数据包是否已发送、是否到达目的地等。
  • 如果您使用相同的代码连接所有 FTP 服务器,从同一位置连接,并且您可以从同一台机器连接到 filezilla,我会四倍检查您的凭据并且您的呼叫正确变量。否则它似乎没有意义。我没有看到您在代码中使用用户名和密码。
  • 对我来说听起来像是一个凭据问题

标签: c# sockets ftp


【解决方案1】:

错误 10065 不是凭据问题。这是一个 TCP 协议错误。这通常意味着主机不可访问。它发生在建立连接之前(甚至可以交换凭据之前)。可能是超时或防火墙问题。

您能否验证您用于连接的 IP 地址(即 main_ipEndPoint)与其他 FTP 客户端获得的 IP 地址是否匹配?您应该能够在 FTP 客户端日志中看到它。或者您可以直接在 FileZilla(等)中输入 IP 地址,看看它是否可以连接。

【讨论】:

  • 你是对的。错误发生在凭据通过之前。我尝试在 filezilla 中使用确切的主机、用户名、密码,并且成功了。所以没有输入错误IP的可能性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 2010-12-07
  • 1970-01-01
  • 2010-11-01
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多