Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2013, 08:56   #1
BarakudaX777
Пользователь
 
Регистрация: 13.06.2010
Сообщений: 53
По умолчанию Как подождать пока не выполнится соединение по putty?

Написал программу на Delphi 2010. Подключаюсь к удаленной базе данных. Настроил Putty. В момент запуска приложения первоначально запускаю putty - load "имя сохраненных настроек".
Потом жду определенное время через Sleep и в "надежде" что putty соединился запускаю подключение к базе.

Вопрос: Как запустить putty, и дождаться его авторизации! Что бы потом делать Connect.

Запускаю так:
Код:
  //путь до приложения (putty лежит там же)
  path:=ExtractFileDir(Application.ExeName);
  //Закрываем все ранее открытые туннели
  while FindWindow(nil,'inteh56.ru - tunneling')<>0 do      
      SendMessage(FindWindow(nil,'myputty - tunneling'),WM_DESTROY,0,0);
  //Формируем структуру для запуска, отмечаем чтоб приложение запускалось спрятанно.
  FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0);
  with StartUpInfo do
  begin
    cb := SizeOf(TStartUpInfo);
    dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
    wShowWindow := SW_HIDE;
  end;
  //Запускаем putty
  ssh_process := CreateProcess(PChar(path+'\'+'putty.exe'), ' -load "myputty"', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, SSHProcessInfo);
  //Жду... по умолчанию так как разные компы реагируют по разному жду 7 секунд. обычно этого хватает даже через чур..
  sleep(sleep_time);

   if (ZConnection1.Connected ) then ZConnection1.Connected :=false;
   ZConnection1.Connected := true;
Пробовал реализовывал задержку с помощью WaitForSingleObject, так как програмка досовская, запускается и подключается, она продолжает висеть в памяти и работать.. А это событие срабатывает только когда она закрывается. Нужно как то определить событие что putty авторизовался, или что то в этом роде...

Может как нибудь проверять открылся ли порт? я открывал порт 76065. Посоветуйте как выйти с данной ситуации!
BarakudaX777 вне форума Ответить с цитированием
Старый 21.02.2013, 08:57   #2
BarakudaX777
Пользователь
 
Регистрация: 13.06.2010
Сообщений: 53
По умолчанию

Забыл сказать. Программа работает с удаленной базой сайта. putty создает туннель ssh2 для доступа к базе сайта. Коннект осуществляю через ZeoDBO.
BarakudaX777 вне форума Ответить с цитированием
Старый 21.02.2013, 09:06   #3
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Ну понятно для чего. Когда пути цепляется то становится доступным порт 3306.
Может в цикле проверять доступность порта. Если доступен то подключаемся. И не привязываться к путти
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 21.02.2013, 09:19   #4
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

А можно просто в цикле пытаться прицепиться к базе. После того как подключился выходить из цикла.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 21.02.2013, 09:21   #5
BarakudaX777
Пользователь
 
Регистрация: 13.06.2010
Сообщений: 53
По умолчанию

Решил следующим образом
Код:
curr_connect:=0;
  start_connect:=false;
  while curr_connect<10 do begin
    TcpClient1.Open;
    curr_connect:=curr_connect+1;
    if TcpClient1.Connected then begin
      TcpClient1.Close;
      start_connect:=true;
      break;
    end;
    sleep(1000);
  end;
 if start_connect then ShowMessage('Подключились за '+inttostr(curr_connect)+' секунд');
Может кому пригодится.
Только вот думаю каким временем ограничить максимальное время подключения. Ограничил 10 секундами. Если за 10 секунд не подключится то программа должна предложить запустится автономна. все операции должны подготавливать SQL команды, добавлять их в очередь, а при последующем доступе к интернету заливать их.
BarakudaX777 вне форума Ответить с цитированием
Старый 21.02.2013, 12:13   #6
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Да не нужен там слип.Оберните все в try except при не успешном подключении и в цикле пытайтесь подключиться. Это как раз называется ожидание в цикле.
И не надо никакого времени
Цитата:
Только вот думаю каким временем ограничить максимальное время подключения
этот вопрос уйдет сам собой.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 21.02.2013, 13:47   #7
BarakudaX777
Пользователь
 
Регистрация: 13.06.2010
Сообщений: 53
По умолчанию

Цитата:
Сообщение от rdama Посмотреть сообщение
Да не нужен там слип.Оберните все в try except при не успешном подключении и в цикле пытайтесь подключиться. Это как раз называется ожидание в цикле.
И не надо никакого времени этот вопрос уйдет сам собой.
Я считаю что если убрать задержку, слишком много будет происходить запросов, зачем нагружать компьютер.
Почему я не пробовал сразу подключение поставить в цикл:
Во первых это выдает ошибку, даже если ее заэкранировать try except, отладка программы через делфи будет труднее то что она будет перехватывать данные ошибки. Ну и во вторых проверка порта как мне кажется происходит намного быстрее, в отличае от нагрузки при попытки подключится к базе данных. Это мое мнение.
BarakudaX777 вне форума Ответить с цитированием
Старый 21.02.2013, 15:24   #8
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Каких запросов?
Какая нагрузка создается от не успешной попытки подключения?
А вы пробовали отключать отслеживание ексепшенов в делфи чтоб увидеть поведение программы не в режиме отладки?
Конечно в отладке try except не работают.
С чего вы решили что проверка доступности порта будет быстрее чем попытка подключиться?
Ведь и в том и другом случае это попытка создать подключение типа точка-точка.
Так что я уверен что разницы ни какой. Лишь зависимость настройки ожидания ответа.В вашем случае не критично.
Что писать ересь то? Или вы думаете что путти у вас не цепляется из-за нагрузки на компе?
Ну и конечно вопрос.Вы что на 300 работаете?
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 21.02.2013, 16:18   #9
BarakudaX777
Пользователь
 
Регистрация: 13.06.2010
Сообщений: 53
По умолчанию

Возможно вы правы. Спорить не буду.
Цитата:
Сообщение от rdama Посмотреть сообщение
Ну и конечно вопрос.Вы что на 300 работаете?
Не понял суть вопроса.
BarakudaX777 вне форума Ответить с цитированием
Старый 21.02.2013, 17:29   #10
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Вот суть
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подождать пока активное окно TwiX Общие вопросы Delphi 3 20.03.2012 08:54
Какой код выполнится быстрее? _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 33 12.09.2010 19:54
не могу запустить серв через putty.exe WebMaster89 Помощь студентам 0 04.04.2010 07:57
как подождать о определить закрытие приложения Анастасия123456789 Общие вопросы Delphi 1 02.05.2009 16:30
Запустить другую программу и подождать, пока она отработает Олвин Помощь студентам 15 22.04.2008 00:35