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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2011, 19:24   #1
-=Virus=-
Форумчанин
 
Аватар для -=Virus=-
 
Регистрация: 03.07.2009
Сообщений: 246
По умолчанию Пинг адреса и проверка открытости порта

Суть проблемы такова:
Я пишу плагин для чата, нужно пропинговать определённые адреса и проверить на открытость порта, затем вывести всё в определённый канал, но это всё фигня. Пингую адреса и получается так что весь сервер подвисает в то время пока идёт проверка адресов. Понял что это происходит в этом коде:
Код:
procedure TForm1.DCPing();
var
  i:integer;
  s,app:string;
begin
 App := ExtractFilePath( ParamStr(0));
 memo1.Lines.LoadFromFile(app+option+'Privetstvie.txt');
 begin
 for I:=0 to Listbox1.Count-1 do
  begin
   s:=listbox1.items[i];
 try
  IdTCPClient1.Host:=s;
  IdTCPClient1.Port:=411;
  IdTCPClient1.Connect;
   if IdTCPClient1.Connected
    then 
     //подключились
 Memo1.Lines.Add('* '+s+' '+'online');
 IdTCPClient1.Disconnect;
   except
//не подключились
 Memo1.Lines.add('* '+s+' '+'offline');
 end;
 end;
end;
И так вопрос таков, как можно сделать так что бы этот код не так сильно грузил программу? Или подскажите пожалуйста другой способ проверить адрес и узнать открыт ли порт.
-=Virus=- вне форума Ответить с цитированием
Старый 25.02.2011, 21:11   #2
-=Virus=-
Форумчанин
 
Аватар для -=Virus=-
 
Регистрация: 03.07.2009
Сообщений: 246
По умолчанию

Оказывается что грузит программу строчка:

Код:
procedure TForm1.DCPing();
var
  i:integer;
  s,app:string;
begin
 App := ExtractFilePath( ParamStr(0));
 memo1.Lines.LoadFromFile(app+option+'Privetstvie.txt');
 begin
 for I:=0 to Listbox1.Count-1 do
  begin
   s:=listbox1.items[i];
 try
  IdTCPClient1.Host:=s;
  IdTCPClient1.Port:=411;
  IdTCPClient1.Connect;
   if IdTCPClient1.Connected
    then 
     //подключились
 Memo1.Lines.Add('* '+s+' '+'online');
 IdTCPClient1.Disconnect;
   except
//не подключились
 Memo1.Lines.add('* '+s+' '+'offline');
 end;
 end;
end;
Может кто знает как с ней бороться?
-=Virus=- вне форума Ответить с цитированием
Старый 26.02.2011, 12:36   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

При чем тут мемо. Вы вобще в курсе, что TCP коннект на хост, который вас не ждёт, может подвиснуть на величину TCP таймаута, то есть секунд на 15-20? Пингуйте через ICMP (без указания порта) или через UDP (в надежде, что если ваша прога сидит на UDP, то и на TCP будет сидеть).

Ну или создавайте себе поток на каждого клиента, и пусть себе висят, сколько хотят.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка существование Email адреса на сервере Бутаков_Сергей Работа с сетью в Delphi 7 29.12.2010 01:55
Поиск адреса ЛПТ порта Ma3a Общие вопросы Delphi 10 10.12.2010 09:48
Установка серверу адреса и порта Indy 10 Lokos Работа с сетью в Delphi 3 10.11.2010 08:15
проверка порта!! Dryg2009 Работа с сетью в Delphi 4 02.11.2009 18:04
Проверка правильности IP адреса Nester Помощь студентам 2 23.08.2009 14:39