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

dis*_*kid 0 c# ftp ssh 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);
}
Run Code Online (Sandbox Code Playgroud)

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

尚无此类主机

那也许是因为我使用主机的Url值而不是IP?(我已经使用IP使用另一台FtP服务器进行了测试,而且似乎也可以正常工作)我想知道是否是这种情况?如果是这样,是否有办法让SftpClientSsh.Net)处理Url?

ark*_*cha 5

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

某些完整的应用程序接受除主机名之外的其他内容这一事实几乎没有什么意义:它将字符串拆分为分离的令牌,并连接到解析主机名时返回的IP地址。但这并不意味着您可以打开到URL或任意字符串的任何网络连接。只能打开与IP地址的连接。

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