在并发连接期间,sharpssh“会话已关闭”

时间:2012-11-22 13:37:30

标签: c# ssh .net-2.0 sharpssh

我正在将SharpSSH集成到现有的.NET 2.0项目中。因此无法切换到http://sshnet.codeplex.com/或其他较新的库...

我拥有与设备进行单一连接的所有工作,可以毫无问题地运行命令和上传文件。

但是因为该工具必须能够同时更新多个设备,所以应用程序同时启动多个sharpssh连接。然后一切都继续工作但有时文件没有完全上传,并且抛出错误“会话已关闭”。

SshTransferProtocolBase tx = new Scp(_hostname, _username, _password);
tx.Connect();
tx.OnTransferProgress += new FileTransferEvent(tx_OnTransferProgress);

tx.Put(sshSource.FullName, "/tmp/" + Path.GetFileName(sshTarget));
// --> tx.Put throws the error

将“new Scp”替换为“new Sftp”,如此

SshTransferProtocolBase tx = new Sftp(_hostname, _username, _password);

错误消息是:“输入流已关闭”或“会话已关闭”

关于如何避免这种情况的任何想法?

非常感谢, 弗兰克

2 个答案:

答案 0 :(得分:3)

我一直在努力解决同样的问题。在多处理过程中出现“会话已关闭”错误是SharpSSH的一个已知问题。此库不再更新。所以我建议你使用另一个SSH库,比如SSH.NET: https://github.com/sshnet/SSH.NET

易于使用。一个例子:

SshClient sshobject = new SshClient(OSShostIP, OSSusername, OSSpassword);
sshobject.Connect();
sshobject.RunCommand("mkdir /home/nedim");
sshobject.Disconnect();

答案 1 :(得分:0)

通过添加具有可定义的最大重试次数的重试循环来解决...