我正在写试图写一个 SSH 客户端。我使用的是 Windows 窗体而不是控制台应用程序。我不想使用它,因为我想学习如何让这个工作......无论如何,这个问题。我有一个 while 循环,只要我的外壳打开,它就会运行。但是为了通过我的文本框将输入发送到 Ssh 服务器,我需要它等待输入。我添加了一个监听 ENTER KEY 的事件监听器。并获取然后输入我有一个返回数据的函数。该函数内部是一个while循环,只要变量为真,它就会运行。关于 enter 列表的全部内容是,我将更改保持函数内部 while 运行的变量,以便它退出该变量并在文本框中返回数据。
所以我需要一种方法来覆盖函数内部的while循环并将变量设置为false。我听说过覆盖以及线程方面的事情,但我不确定该怎么做。
这是我的代码!
//Variables
public string mHost;
SshShell mShell;
public string mInput;
string pattern = "";
bool mInputHolder = true;
//Initiate form!
public Form1()
{
InitializeComponent();
txthost.Text = "sdf.org";
txtuser.Text = "kalle82";
txtpass.Text = "XXXX";
string pattern = "sdf:";
this.txtInput.KeyPress += new System.Windows.Forms.KeyPressEventHandler(checkforenter);
}
public void button1_Click(object sender, EventArgs e)
{
try
{
mShell = new SshShell(Host, User);
mShell.Password = Pass;
//WRITING USER MESSAGE
txtOutput.AppendText("Connecting...");
mShell.Connect();
txtOutput.AppendText("OK");
//txtOutput.AppendText("Enter a pattern to expect in response [e.g. '#', '$', C:\\\\.*>, etc...]: ");
//Stop for user input
mShell.ExpectPattern = pattern;
mShell.RemoveTerminalEmulationCharacters = true;
while (mShell.ShellOpened)
{
txtOutput.AppendText("\r\n" + "TERMINAL MODE ENGAGED");
txtOutput.AppendText(mShell.Expect( pattern ));
string data = userInput();
if (data == "") break;
//Data from termninal --> Append to text
string output = mShell.Expect(Pattern);
txtOutput.AppendText(output);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public void checkforenter(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.KeyChar == (char)13)
{
mInputHolder = false;
}
}
public string userInput()
{
while (mInputHolder == true)
{
}
mInputHolder = true;
return txtInput.Text;
}