Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Найти рабочий хост  (Прочитано 7257 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Shouldercannon
Помогающий

ru
Offline Offline

« : 30-09-2016 11:16 » 

Есть список IP-адресов. Нужно пробежаться по этому списку, найти рабочий хост и остановить цикл после передав рабочий IP-адрес для дальнейших манипуляций.
Сделал набросок и не работает, постоянно возвращается False даже при одном рабочем хосте.
Код: (Delphi)
procedure TGetHost_Thread.Execute;
var
  CL: TClientSocket;
  I, TimeOut: Integer;
begin
  try
    try
      CL := TClientSocket.Create(nil);
      CL.ClientType := ctNonBlocking;

      for I := 0 to Form1.Memo1.Lines.Count - 1 do
      begin
        B := False;

        CL.Host := Form1.Memo1.Lines.Strings[I];
        CL.Port := 5191;
        CL.Open;
        // Имитация блокирующего режима
        for TimeOut := 1 to 20 do // 20 по 100 ms = 2 секунды
        begin
          if (CL.Active <> True) then
          begin
            Sleep(100);
          end;
        end;

        if CL.Active then
        begin
          B := True;
          Break;
        end;

        CL.Close;
      end;
    except
    end;
  finally
    FreeAndNil(CL);
  end;

  Synchronize(SyncProc);

  Terminate;
end;

procedure TGetHost_Thread.SyncProc;
begin
  if B then ShowMessage('Есть рабочий хост');
end;
Записан
SCRIBE
Гость
« Ответ #1 : 06-10-2016 11:43 » 

А чем ошибки заслужили чтобы их игнорили?)
Код:
except
end;
Записан
SCRIBE
Гость
« Ответ #2 : 06-10-2016 12:20 » 

И да, если смысл в игнорировании ошибки при подключения к нерабочему хосту, то почему try except охватывает и создание объекта? Думаю лучше засунуть его внутрь цикла.

П.С. Это чисто предположение, не тестировал.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines