2017-04-11 92 views
0

ファイルをFTPサーバーにアップロードするコンソールアプリケーションを構築しました。このFTPサーバはSFTPプロトコルのみを受け入れるので、私はSSH.NETオープンソースライブラリを使用しています。これは、.NETにメソッドが組み込まれていないためです(.NET 3.5ではVisual Studio 2008 Professionalで使用しています)。SSH.NETを使用してSFTPにファイルをアップロードする:接続できません

私は多くの例を見てきました。私は公開SFTPサーバーに接続し、SFTPプロトコルを使用してファイルをアップロードするためのクイックテストアプリケーションを実装しました。

私はhereから取得した公開無料SFTPサーバーの下に使用しています:

const string host    = "demo.wftpserver.com"; 
    const string username   = "demo-user"; 
    const string password   = "demo-user"; 
    const string workingdirectory = "/upload"; 
    const string uploadfile  = @"C:\test.txt"; 
    const int port    = 2222; 

    static void Main(string[] args) 
    { 
     try 
     {     
      using (SftpClient client = new SftpClient(host, port, username, password)) 
      { 
       { 
        client.Connect(); 
        Console.WriteLine("Connected to {0}", host); 

        client.ChangeDirectory(workingdirectory); 
        Console.WriteLine("Changed directory to {0}", workingdirectory); 

        var listDirectory = client.ListDirectory(workingdirectory, null); 
        Console.WriteLine("Listing directory:"); 
        foreach (var fi in listDirectory) 
        { 
         Console.WriteLine(" - " + fi.Name); 
        } 

        using (var fileStream = new FileStream(uploadfile, FileMode.Open)) 
        { 
         Console.WriteLine("Uploading {0} ({1:N0} bytes)", uploadfile, fileStream.Length); 
         client.BufferSize = 4 * 1024; // bypass Payload error large files 
         client.UploadFile(fileStream, Path.GetFileName(uploadfile), null); 
        } 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      Console.Out.WriteLine(e.Message); 
     } 

問題は以下の通りである:

接続しようとすると

server : demo.wftpserver.com 
user  : demo-user 
password : demo-user 
port  : 2222 

そしてここでは、コードですサーバーは以下の文を使用します。

client.Connect(); 

私は例外があります。例外は、次の言葉:

"Value cannot be null. \r\nParameter name: All lists are either null or empty." 

StackTrace " at Renci.SshNet.Session.WaitOnHandle(WaitHandle waitHandle, TimeSpan timeout)\r\n at Renci.SshNet.Session.WaitOnHandle(WaitHandle waitHandle)\r\n at Renci.SshNet.Session.Connect()\r\n at Renci.SshNet.BaseClient.Connect()\r\n at ConsoleApplication2.Program.Main(String[] args) at C:\\Users\\Win7\\Downloads\\ConsoleApplication2\\ConsoleApplication2\\Program.cs:line 61" string 

また、私はhereが成功せず説明したようにタイムアウトを変更しようとしています。

しかし、FileZillaクライアントと同じ資格情報を使用して同じSFTPサーバーに接続しようとすると、問題なく接続でき、ファイルをアップロードすることもできます。

私は何が起こっているのか分かりません。誰か助けてくれますか?

更新: 私はこれを見つけましたfixこのパッチは2017年1月22日に開発されましたが、ダウンロード用の最後のバイナリは2016年12月14日です。この修正プログラムを含むバイナリはどうすれば入手できますか?

答えて

1

私は解決しました。

このバグが修正された開発者ブランチからソースコードをダウンロードしました。その後、Visual Studio 2015で.NET Framework 3.5プロジェクトを開き、ビルドします。だから私はリリースとデバッグのためのDLLバイナリを手に入れました。その後、私のVisual Studio 2008プロジェクトに戻り、このリファレンスを追加します。私は同じコードで、同じ資格情報でFTPサーバーに接続できることを確認しました。

SSH.NET Webで提供されている最後のバイナリには、このバグが修正されていません。

-3

SFTPでファイルを送信するためにTamir.SharpSSHを使用しました。このコードを使用してみてください。コードはあなたのSFTPにファイルを送る最も簡単な方法です。

Sftp sftpBase = new Tamir.SharpSsh.Sftp(_sftpHost, _sftpUid, Up_decryptPass); 
sftpBase.Connect(int.Parse(_sftpPort)); 
sftpBase.Put(Dir + filename, sftpDir); 
+1

SharpSSHは死んだプロジェクトです。それを使用しないでください。ウェブサイトもダウンしている、atm。 –

+0

死んでいない。私たちは現在、このプロジェクトで使用しています。 –

+0

最後のバージョンは2011年のもので、2007年以来Webページは更新されていません。現代の暗号をサポートすることさえできません。 –

関連する問題