2017-02-06 1 views
0

Я использую следующий код для загрузки файла на сервер sFTP. Я сделал тестовую загрузку, используя FileZilla, и файл загружен успешно.SftpClient с использованием Url вместо IP в качестве хоста

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? (Я провел тест с другим сервером FtP, использующим IP-адрес, и это тоже работает) Мне интересно, так ли это? Если да, есть ли способ позволить SftpClient (Ssh.Net) обрабатывать адрес?

+0

Параметр host может быть IP-адресом или именем хоста, которое может быть разрешено для IP-адреса. Возможно, это не URL-адрес, это совершенно другое. – arkascha

+0

@arkascha does 'ftp.staging.blahblahblah.com/ContactImport' не похоже на имя? У FileZilla нет проблем с этим, но моя программа. – Disasterkid

+0

Нет, это выглядит как строка, которая может быть интерпретирована как имя узла узла, путь к части. Это ни URL, ни имя хоста. Имя хоста будет 'ftp.staging.blahblahblah.com'. – arkascha

ответ

4

Параметр host может быть IP-адресом или именем хоста, которое может быть разрешено для IP-адреса. Это может быть не URL-адрес, это нечто совершенно отличное от технической точки зрения.

Тот факт, что какое-либо полное приложение принимает что-то другое, чем имя хоста, мало говорит: он разбивает эту строку на токены разделителя и соединяется с IP-адресом, который он получает при решении имени хоста. Но это не означает, что вы можете открыть любое сетевое подключение к URL-адресу или какой-либо произвольной строке. Можно только открыть соединение с IP-адресом.

Так что если вы успешно протестируете некоторый URL-адрес, например, sftp://ftp.example.com/ContactImport в некоторой «программе», это не означает, что вы можете использовать эту строку в качестве параметра хоста в своем коде. Вы должны использовать имя хоста, которое является частью такого URL, поэтому ftp.example.com в этом случае, поскольку только это может быть успешно разрешено для IP-адреса.

+0

Ничего себе, спасибо вам огромное. Я не очень разбираюсь в отправке SFTP и был смущен, потому что, когда я отправил FTP, я использовал бы ftp: // .... url, поэтому я предположил, что SFTP будет тем же самым. Я ошибался. Ваш ответ немного помог вам. – Lostaunaum

+0

@ Lostaunaum 'sftp' и' ftp' - две разные вещи. Они похожи на то, как они используются, но это касается. 'ftps' и' ftp' намного ближе, основываясь на том же базовом протоколе. Но даже они используют разные схемы протоколов в URL-адресах по уважительным причинам ... – arkascha

Смежные вопросы