SftpClient 使用 Url 而不是 IP 作为主机

SftpClient using Url instead of IP as host

我正在使用以下代码将文件上传到 sFTP 服务器。我使用 FileZilla 进行了测试上传,文件上传成功。

try
{
    var client = new SftpClient(host, port, username, password);
    client.Connect();
    client.ChangeDirectory(workingDir);
    var listDirectory = client.ListDirectory(workingDir);
    foreach (var file in files)
    {
        var fileStream = new FileStream(file, FileMode.OpenOrCreate);
        client.BufferSize = 4 * 1024; // bypass payload error large files
        client.UploadFile(fileStream, Path.GetFileName(file));
        Log.Info(string.Format("File [{0}] upload complete",file));
    }

}
catch (Exception ex)
{
    Log.Error(ex.Message);
}

但是在上面的代码中,我似乎无法完成上传,因为出现以下错误:

No such host is known

这可能是因为我使用主机的 Url 值而不是 IP? (我已经使用 IP 对另一台 FtP 服务器进行了测试,这似乎也有效)我想知道是否是这种情况?如果是这样,有没有办法让 SftpClient (Ssh.Net) 处理 Url?

host参数可以是IP地址,也可以是可以解析为IP地址的主机名。它可能不是URL,从技术角度来看是完全不同的东西。

一些完整的应用程序接受主机名以外的东西这一事实说明的很少:它将该字符串拆分为单独的标记并连接到解析主机名时返回的 IP 地址。但这并不意味着您可以打开与 URL 或某个任意字符串的任何网络连接。只能打开到 IP 地址的连接。

因此,如果您在某些 "program" 中成功测试了某些 URL,例如 sftp://ftp.example.com/ContactImport,这并不意味着您可以在代码中内部使用该字符串作为主机参数。您需要使用作为 URL 一部分的主机名,因此在本例中为 ftp.example.com,因为只有这样才能成功解析为 IP 地址。