@a63826ndrew
Студент, новичок в Python

Что делаю не правильно с SSH?

Здравствуйте!
Работаю с SSH, надо через него реализовать подключение, возможность производить отключение, отправку команд и вывод результата команд на форму, из всего этого у меня только подключение получилось.
Я объявил метод InitSSH:
public void InitSSH()
        {
            int port = Int32.Parse(txtPort.Text);
            SshClient SSHclient = new SshClient(txtIP.Text, port, txtLogin.Text, txtPassword.Text);
        }

Потом реализовал подключение:
private void btnConnect_Click(object sender, EventArgs e)
        {
            if (txtIP.Text == "" ||  txtPort.Text == "" || txtLogin.Text == ""  || txtPassword.Text == "")
            {
                MessageBox.Show("Заполните все поля!","Ошибка",MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                InitSSH();
                TimerPoll.Start();
                lblStatus.Text = "Подключён";
                lblStatus.ForeColor = Color.Green;
                btnConnect.Enabled = false;
                btnDisconnect.Enabled = true;
            }
        }

А когда стал реализовывать отключение соединения по нажатию кнопки возникли проблемы:
1. У меня в форме используется tabpage, и из-за этого у меня стоит условие на сначала на выбранную вкладку, а потом на наличие установленного соединения.
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e, object client)
        {
            if (tabControl1.SelectedIndex == 0)
            {
                if (SSHclient.Connected)
                {
                    SSHclient = null;
                    TimerPoll.Stop();
                    lblStatus.Text = "Не подключён";
                    lblStatusPO.Text = "Не подключён";
                    OVEN_info.Items.Clear();
                }
            }

В обоих случаях у меня ошибка "Имя "SSHclient" не существует в текущем контексте"
2. Посылать команды насколько я понял можно с помощью "RunCommand" и саму команду через textbox задаю, а вот как обрабатывать результат? Его парсить надо или в переменную завернуть в listbox вывести? я именно сам механизм не понимаю, как это должно работать.
Заранее спасибо.
  • Вопрос задан
  • 121 просмотр
Решения вопроса 3
Vindicar
@Vindicar
RTFM!
Учи язык, что тут скажешь. Точнее, читай про области видимости и время жизни объекта.
У тебя SSHClient - локальная переменная в методе InitSSH(). Она существует, пока метод выполняется, и видна только внутри этого метода. По завершению метода она уничтожается.
Если тебе нужно, чтобы время жизни объекта превышало время выполнения метода, т.е. чтобы объект не уничтожался по его завершении - объект должен лежать в атрибуте класса. Тогда его время жизни будет (как правило) равно времени жизни экземпляра класса (например, формы), а область видимости будет покрывать все методы класса.
Ответ написан
Adler_lug
@Adler_lug
Объяви SshClient за пределами InitSSH, а в нем лишь присвой ему значение.
Ответ написан
vabka
@vabka Куратор тега C#
Токсичный шарпист
Тот SSHClient, который ты инициализируешь в InitSSH - это локальная переменная.
Тебе следует обращаться к this.SSHclient => нужно ещё создать поле в классе с таким именем и типом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы