Форум: "Начинающим";
Текущий архив: 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.61 MB
Время: 0.007 c