当SshStream不再有效时,SshStream. expect()会中断代码
本文关键字:SshStream 代码 中断 不再 有效 expect | 更新日期: 2023-09-27 18:14:01
我试图在SSH上做自动化,但服务器有故障,没有正确实现执行通道,所以我最终使用CreateShellStream()
做了一个解决方案。我可以预期,在运行程序时,连接将不可用,断开连接是一件事。我的解决方案:
while(!_cancellationToken.IsCancellationRequested))
{
ShellStream stream = null;
while(stream == null)
{
stream = await GetSshStream();
}
while(stream.CanWrite && stream.CanRead)
{
stream.WriteLine(command);
//this breaks everything if stream is not valid
var rep = stream.Expect(new Regex(@"[$>]"));
var delimiters = new[] { " ", "'r'n", "'t" };
var values = rep.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
DealWithValues(values);
}
}
此工作并等待连接,一旦连接开始coms。出现的问题是,stream.CanWrite && stream.CanRead
不足以检测到stream
是健康的,一旦连接丢失,流变得无效,并与Expect();
一起使用,一切都中断了。跳出所有循环,通过try {} catch{}
,甚至使Visual Studio调试器步进中断并在另一个线程(多线程程序)中继续程序。是否有一种方法来阻止这种情况的发生,并抛出执行回到第一个while
?我可以创建一个新的流,每次我需要访问服务器,但由于我轮询参数大约每秒一次,我不想有每次重新连接的开销。
我误以为线程消失代码执行停止了。相反,线程休眠等待输入。Expect
有一个超时过载,我应该一直使用它