我正在将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);
错误消息是:“输入流已关闭”或“会话已关闭”
关于如何避免这种情况的任何想法?
非常感谢, 弗兰克
答案 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)
通过添加具有可定义的最大重试次数的重试循环来解决...