Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.10;
Скачать: CL | DM;

Вниз

помогите с пингом   Найти похожие ветки 

 
linuxoid   (2010-07-12 16:00) [40]

контроль всмысле - быть осведомленным что происходит в сети. знать какие хосты в какое время отключались


 
Dennis I. Komarov ©   (2010-07-12 16:19) [41]


> но и  управляемые свичи находящиеся удаленно от меня

тем более...


 
linuxoid   (2010-07-12 16:27) [42]

возвращаюсь к исходному вопросу. Как бы мне все это реализовать?


 
faiwer ©   (2010-07-12 17:35) [43]

Вот так:

 tablebase.Open;
 tablebase.First;
 for i:=1 to tablebase.recordcount do begin
   adres:=tablebase.fields.Fields[2].AsString;
   icmp.Host:=adres;
   icmp.Ping();
   listbox1.Items.Add("Время до хоста: "+" - "+inttostr        
     (icmp.ReplyStatus.MsRoundTripTime)+"ms")
   Application.ProcessMessages;
   tablebase.Next;
 end;

Местные тебе весь мозг съедят. А я так понял - тебе прога нужна чисто временно чтобы не бегать и не напрягаться, врядли тебе изза этого захочется познавать дзен сетей и делфей )


 
Leonid Troyanovsky ©   (2010-07-12 20:42) [44]


> faiwer ©   (12.07.10 17:35) [43]

> нужна чисто временно чтобы не бегать и не напрягаться

Где ж он временно напрягся? Ну, или, побегал.

--
Regards, LVT.


 
linuxoid   (2010-07-13 08:40) [45]

хосты удалены от меня. если какой нить из них не доступен, пойти и исправить. просто невозможно за всеми следить. лучше с одного места.


 
brother ©   (2010-07-13 08:44) [46]

сколько штук? а то: cmd с ping не подойдет?


 
linuxoid   (2010-07-13 08:44) [47]


> faiwer ©   (12.07.10 17:35) [43]


все равно зависает. поищу другой подход.


 
brother ©   (2010-07-13 08:54) [48]

Файл ping10.1.1.1.cmd :
ping 10.1.1.1 - t
не подойдет?


 
linuxoid   (2010-07-13 08:59) [49]


> brother ©   (13.07.10 08:54) [48]


неа.

см.(22).


 
brother ©   (2010-07-13 09:15) [50]

[46] ?


 
linuxoid   (2010-07-13 09:30) [51]

количество неограничено. оно увеличивается. и через cmd будет неудобно. а с программным интерфейсом гораздо удобнее.


 
Dennis I. Komarov ©   (2010-07-13 09:33) [52]


> linuxoid   (13.07.10 08:44) [47]

Что есть зависание в твоем понятии?


 
linuxoid   (2010-07-13 09:42) [53]


> Что есть зависание в твоем понятии?


после запуска программа стоит. все кнопки не активны. затем разом в листбокс добавляется отчет по нескольким хостам. через некоторое время еще по нескольким. выход даже на рабоает


 
brother ©   (2010-07-13 09:49) [54]

[43] Application.ProcessMessages;
а не закрывается тк у тя цикл не закончился, делай принудительно выход из цикла

> for i:=1 to tablebase.recordcount do begin


 
brother ©   (2010-07-13 09:53) [55]

> а с программным интерфейсом гораздо удобнее.

А, так тебе шашечки? Значит не линуксоид ты)


 
Anatoly Podgoretsky ©   (2010-07-13 10:04) [56]

> linuxoid  (13.07.2010 08:40:45)  [45]

Тебе о проблемах соощат пользователи и вероятно, что пинг в этом случае
будет работать.
Это бессмысленная работа, точнее лишь бы не работать.


 
Anatoly Podgoretsky ©   (2010-07-13 10:09) [57]


> 12 ©   (12.07.10 14:06) [14]

В Инди то?


 
Anatoly Podgoretsky ©   (2010-07-13 10:11) [58]


> нужен наилучший вариант кода который проверит на наличие
> доступности хоста в сети.

Большинство файрволов имеют в составе verifier это штука помощнее, а не видимость проверки с пингом, что просто шоры на глаза. Иммитация работы.


 
linuxoid   (2010-07-13 10:12) [59]

а что если все данные вначале занести в массив adres[i].
затем пинг делать перебирая значение массива.

постоянное обращение к базе влияет?


 
Dennis I. Komarov ©   (2010-07-13 10:18) [60]


> постоянное обращение к базе влияет?

нет


 
linuxoid   (2010-07-13 10:21) [61]

вот нашел аналог. хотелось бы такое. здесь просто задается диапазон ip.
а в моей они должны братся из базы.

http://www.delphisources.ru/pages/sources/internet/2007_year/ping_thread.html


 
Dennis I. Komarov ©   (2010-07-13 10:23) [62]


> после запуска программа стоит. все кнопки не активны. затем
> разом в листбокс добавляется отчет по нескольким хостам.
>  через некоторое время еще по нескольким. выход даже на
> рабоает

Ну так она работает, а не зависает. Чего ты ее дергаешь? Выноси пинг в отдельный поток если тебе кнопки жать хоца...
Правда, ИМХО, там грабель насобирашь...


 
brother ©   (2010-07-13 10:26) [63]

> Выноси пинг в отдельный поток если тебе кнопки жать хоца...
>
> Правда, ИМХО, там грабель насобирашь...

вот вот, я хотел посоветовать - потом передумал)


 
brother ©   (2010-07-13 10:30) [64]

кстати:

> нужно поочередно всех пропинговать.

в [54] иже с ним, так и делается, а не реакция - работает...)


 
linuxoid   (2010-07-13 10:40) [65]

все равно во время пинга в проге моей даже окно нельзя перетаскивать. вписывать какие нить данные в эдиты и т д.


 
faiwer ©   (2010-07-13 10:52) [66]

linuxoid
1. я в твой код добавил Application.ProcessMessages - это гарантирует то, что твой ListBox будет пополнятся постепенно, а не разом после всех пингов
2. если ты хочешь чтобы не зависал интерфейс - тебе надо выносить сетевую часть в отдельный поток. Что то мне подсказывает, что после пары статей про потоки, ты передумаешь, и захочешь чтобы зависало дальше )


 
faiwer ©   (2010-07-13 10:58) [67]

Объясню по понятнее.
Твоя программа (я имею ввиду твои процедуры и функции) и её интерфейс работают в одном потоке. Если поток чем то занят, он чтото делает, то чтото другое он не делает. Поток не может делать сразу два дела в 1 момент времени. Поетому когда ты его нагружаешь пингами, он не может перерисовать ListBox, чтобы там повился новый элемент, и не может обработать твои нажатия на эдитки, кнопки и прочие вещи - ибо он "пингует", он всё ещё внутри цикла.

Application.ProcessMessages - временно выполняет скопившиеся задачи, то есть если листбокс хотел нарисовать новый элемент - он его нарисует, по окончанию списка задач, твоя программа вновь пингует. Поетому никакие едитки не пашут. Список обновился, но интерфейс так и остаётся деревянным. Потоку не до этого, он пингует.

Ты можешь вынести пинг-инг в отдельный поток, тогда ничерта зависать не будет, но во первых, тебе придётся прочитать 100500 статей, научится синхронизировать работу с тем же ListBox-ом, да и просто написать много костылей. Если ты чем то (для тебя) сложным в делфях уже занимался, то потоки на голову сложнее :)

P.S. сетевые программы, музыкальные программы даже небольшой сложности обязательно разграничены на 1-2-3...999 потоков )


 
linuxoid   (2010-07-13 11:08) [68]


> faiwer ©   (13.07.10 10:58) [67]

спс. теперь понял.

в этой проге -
http://www.delphisources.ru/pages/sources/internet/2007_year/ping_thread.html

можно делать несколько операции.
почему так нельзя сделать, или в этой проге используют нескоко потоков?
может дело в другом методе?


 
faiwer ©   (2010-07-13 11:15) [69]


> почему так нельзя сделать, или в этой проге используют нескоко
> потоков?
> может дело в другом методе?

Дело в потоках, вот это:

TThreadScan = class(TThread)
    msg : string;
    msg2 : string;
private
    BeginAddr: integer;
    EndAddr: integer;
    Timeout: DWORD;
    procedure UpdateMemo;
    procedure UpdateStatusBar;
    procedure UpdateScanned;
protected
    procedure Execute; override;
public
    constructor Create(a,b:integer);
end;


Отдельный поток.


 
linuxoid   (2010-07-13 11:17) [70]


>
> Отдельный поток.

спасибо. теперь постараюсь сам разобраться.


 
brother ©   (2010-07-13 11:27) [71]

Блин, ты без потоков бы попробовал разобраться!
Держи и смотри как...
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,
 IdIcmpClient, ExtCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   ListBox1: TListBox;
   IdIcmpClient1: TIdIcmpClient;
   Timer1: TTimer;
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure Button1Click(Sender: TObject);
 private

 public
   Work: boolean;
   IpList: array of string;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 i: integer;
begin
 SetLength(IpList, 21);
 for i:= 1 to High(IpList) do
   IpList[i]:= "10.1.1." + IntToStr(i);

 IdIcmpClient1.ReceiveTimeout:= 200;
 Work:= False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 i: integer;
begin
 if Work then
   Exit
 else
   Work:= True;

 ListBox1.Items.Clear;
 for i:= 1 to High(IpList) do
 begin
   IdIcmpClient1.Host:= IpList[i];
   IdIcmpClient1.Ping();
   ListBox1.Items.Add("10.1.1. " + inttostr(i) + " :" +  inttostr(IdIcmpClient1.ReplyStatus.MsRoundTripTime)+"ms");
   Application.ProcessMessages;
   if not Work then
     Break;
 end;
 Work:= False;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Work:= False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Timer1.Enabled:= not Timer1.Enabled;
end;

end.


 
linuxoid   (2010-07-13 12:48) [72]


> begin
>  if Work then
>    Exit
>  else
>    Work:= True;


вот эти не понятны что то?


 
ixen   (2010-07-13 15:20) [73]

а постоянными пингами, не ухудшится ли обмен пакетами в сети?


 
brother ©   (2010-07-14 04:59) [74]

> вот эти не понятны что то?

если уже работаем, то заново не надо запускаться, пока не отработают текущие пинги...
> а постоянными пингами, не ухудшится ли обмен пакетами в
> сети?

имхо нагрузка не велика - нет


 
brother ©   (2010-07-14 05:05) [75]

> вот эти не понятны что то?

странно, но все остальное понятно??? Тогда - дерзай! Удачи!


 
Anatoly Podgoretsky ©   (2010-07-14 10:05) [76]


> вот вот, я хотел посоветовать - потом передумал)

Пожалел :-)


 
Anatoly Podgoretsky ©   (2010-07-14 10:06) [77]


> Application.ProcessMessages - временно выполняет скопившиеся
> задачи

Что неправда, никаких задач, кроме ProcessMessages он не выполняет


 
Anatoly Podgoretsky ©   (2010-07-14 10:09) [78]


> procedure TForm1.Timer1Timer(Sender: TObject);

Это ты зря, ведешь его к stack overflow


 
Anatoly Podgoretsky ©   (2010-07-14 10:10) [79]


> Anatoly Podgoretsky ©   (14.07.10 10:09) [78]

Эту функцию, если оставлять, то надо переписывать, чтобы не возникла указаная проблема.


 
brother ©   (2010-07-14 11:19) [80]

> Это ты зря, ведешь его к stack overflow

в каком случае это будет?
зы интервал таймера 1000



Страницы: 1 2 3 вся ветка

Текущий архив: 2010.10.10;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.009 c
2-1279264750
И. Павел
2010-07-16 11:19
2010.10.10
Ошибка: "Cannot change visible in OnShow or OnHide"


11-1224541718
Harlong
2008-10-21 02:28
2010.10.10
Размер KOLTabControl в WinCE


2-1279461553
@!!ex
2010-07-18 17:59
2010.10.10
Закрытие приложения из сервиса


15-1278662537
Дмитрий Тимохов
2010-07-09 12:02
2010.10.10
Системы бекапа и синхронизации


2-1279517915
linuxoid
2010-07-19 09:38
2010.10.10
помогите с потоком