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

时间:2017-02-06 14:29:44

标签: c# ssh ftp sftp

我使用以下代码将文件上传到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);
}

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

  

没有这样的主人知道

那可能是因为我使用的是主机的Url值而不是IP? (我已经使用IP对另一台FtP服务器进行了测试,而且似乎也在运行)我想知道是不是这样的话?如果有,是否有办法让SftpClientSsh.Net)处理网址?

1 个答案:

答案 0 :(得分:5)

host参数可以是可以解析为IP地址的IP地址或主机名。它可能不是一个URL,这与技术观点完全不同。

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

因此,如果您在某些“程序”中成功测试了sftp://ftp.example.com/ContactImport之类的某些URL,这并不意味着您可以在内部将该字符串用作代码中的主机参数。您需要使用属于此类URL的主机名,因此在这种情况下为ftp.example.com,因为只有该名称才能成功解析为IP地址。