Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.006 c
2-1278947191
Hottabxp
2010-07-12 19:06
2010.10.10
Как написать Dll на Delphi 7 что-бы её можно было использовать ..


15-1279013407
Knight
2010-07-13 13:30
2010.10.10
Почему TServerSocket при отключении клиента...


2-1279280809
Jacksotnik
2010-07-16 15:46
2010.10.10
Непонятное что-то с запросом


2-1278925532
linuxoid
2010-07-12 13:05
2010.10.10
помогите с пингом


6-1226168858
nes
2008-11-08 21:27
2010.10.10
Idhttp: время ответа при запросе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский