2012-10-02 52 views
4

我目前在我的一个项目中面临一个非常奇怪的问题。系统IOException流读取与夏普SSH结束

我已经在我的代码中实现了Tamir Gal的Sharp SSH Library,以便为每个FTP上传一些文件。 当我在调试模式下运行代码时,一切正常。但是,当我生成解决方案,并与内置的版本试试吧,我得到一个System.IO.IOException:

Tamir.SharpSsh.jsch.JSchException: Session.connect: System.IO.IOException: End of IO Stream Read at Tamir.SharpSsh.jsch.IO.getByte(Byte[] array, Int32 begin, Int32 length) 
at Tamir.SharpSsh.jsch.Session.read(Buffer buf) 
at Tamir.SharpSsh.jsch.User.Auth.start(Session session) 
at Tamir.SharpSsh.jsch.UserAuthNone.start(Session session) 
at Tamir.SharpSsh.jsch.Session.connect(Int32 connectTimeout) 
at Tamir.SharpSsh.jsch.Session.connect(Int32 connectTimeout) 
at Tamir.SharpSsh.jsch.SshBase.ConnectSession(Int32 tcpPort) 
at Tamir.SharpSsh.jsch.SshBase.Connect(Int32 tcpPort) 
at Tamir.SharpSsh.jsch.SshBase.Connect() 

它看起来像有与数据流(你好船长明显:)!)问题,所以本程序甚至未建立完成连接方法。我只是不明白为什么在调试时一切正常。 dll在构建过程中被正确复制。

的代码看起来是这样的:

sftpClient = new Sftp(this.ftpHost, this.ftpUser, this.ftpPassword); 
sftpClient.Connect(); 

所有的变量有正确的价值观,我可以像Filezilla的客户端使用它们连接到SFTP服务器。

如果有人能给我一个提示或者有类似的问题,我会非常感谢每一个评论。

谢谢大家,提前祝你有美好的一天。

+0

我必须在2008r2服务器上使用sharpsshtest.exe测试SSH,之后才能解决这个问题。必须注册该dll或类似的东西。 – 2013-06-06 21:20:56

回答

19

我的同事刚刚找到了解决办法:

在SharpSSH你有3名的dll:

  • Org.Mentalis.Security.dll
  • Tamir.SharpSSH.dll
  • DiffieHellman.dll

因为我从来没有在代码中引用Org.Mentalis.Security.dll我完全忘了复制它d通过构建过程。正因为如此,SharpSSH所传递的整个安全层无法访问,这就是导致错误的原因。

我希望这个线程可以帮助其他一些不知情的人。 :)

+2

我曾经做过一些更新SharpSSH的工作。我有一个版本,它拥有一个DLL @ https://bitbucket.org/mattgwagner/sharpssh。我还强烈建议你在Codeplex上查看SSH.net,以获得更好,更好的SSH库。 – MattGWagner

+0

+1你帮了我很多!我面临同样的问题 –