![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не проходит PING на несколько адресов(IP) [D7, Win2k, WinXP]
Dimich1978 © (2005-10-10 14:55:00)Все делаю используя ИНди Компонент IdIcmpClient1
Пишу следующее:
По таймеру срабатывает
for i:=1 to 3 do
begin
if i=1 then ipadr:=JvIPAddress1.Text;
if i=2 then ipadr:=JvIPAddress2.Text;
if i=2 then ipadr:=JvIPAddress3.Text;
Self.IdIcmpClient1.Host:=ipadr;
Self.IdIcmpClient1.TTL:=128;
Self.IdIcmpClient1.Ping;
Ping (pchar(ipadr),nil,Reply,5000);
ListBox1.Items.Add ('RawReply:'+IntToStr (Reply.RoundTripTime));
end;
где JvIPAddress1.Text- IP серверов инетовских, которых надо пропинговать
procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
ListBox1.Items.Add ('Ïîâòîðåíèé:'+IntToStr (AReplyStatus.MsRoundTripTime));
Listbox1.Items.Add(('Ñòàòèñòèêà Ping äëÿ: '+AReplyStatus.FromIpAddress));
Listbox1.Items.Add(('ïðèáëèçèòåëüíîå âðåìÿ ïðèåìà-ïåðåäà÷è: '+inttostr(AReplyStatus.MsRoundTripTime)));
Listbox1.Items.Add(('áàéò ïîëó÷åíî: '+inttostr(AReplyStatus.BytesReceived)));
{ïðèõîäèò 72 áàéòà, íî èçíèõ 40 áàéò ñîñòàâëÿåò çàãîëîâîê icmp ïàêåòà}
Listbox1.Items.Add(('TTL: '+inttostr(AReplyStatus.TimeToLive)));
Listbox1.Items.Add(('Ïîñëåäîâàòåëüíîñ 42;ü Id: '+inttostr(AReplyStatus.SequenceId)));
end;
Получаю ответ:
Спервого адреса все в порядке ПИНГ ОК, по второму и третьему говорит что ПИНг для 0.0.0.0 и все.
Сервера на 100% работаю в данное время, т.е. ответ приходит.
Что не так подправьте мозги.
Dimich1978 (2005-10-14 17:37:00) [1]переправил...тоже самое сохранилось..обратно пинг проходит нормально только с первым пингуеммым хостом, с отсальными двумя фиг. Походу ошибка в компаненте.
Ботвин Дмитрий (2005-10-14 17:06:00) [2]Поставь ReceiveTimeout := 1000 и в цикле добавь sleep
for i:=1 to 3 do
begin
if i=1 then ipadr:=JvIPAddress1.Text;
if i=2 then ipadr:=JvIPAddress2.Text;
if i=2 then ipadr:=JvIPAddress3.Text;
Self.IdIcmpClient1.Host:=ipadr;
Self.IdIcmpClient1.TTL:=128;
Self.IdIcmpClient1.Ping;
Ping (pchar(ipadr),nil,Reply,5000);
ListBox1.Items.Add ('RawReply:'+IntToStr (Reply.RoundTripTime));
Sleep(1000);
end;
Здается мне
Dimich1978 (2005-10-14 16:36:00) [3]Если пинговать средствами винды по всем хостам, то все нормально, пинги ответов приходят, т.е. хосты пингуемые, и файерволл не блокирует эту возможность. Даже если изменить очередность пингуемых серверов, все равно отсается пинговать только первый(без разницы какой из трех ставлю первым на пинг), а второй и третий...в ауте. Так что дело я думаю в самом компоненте. Может кто еще чем сподможет?
-=S..S=- (2005-10-10 16:57:00) [4]
> Ботвин Дмитрий (10.10.05 16:45) [4]
ну таких тонкостей я не знаю :)
Ботвин Дмитрий (2005-10-10 16:47:00) [5]Dimich1978 (10.10.05 14:55)
На компах возможно стоит файервол с опцией "не отвечать на пинг", примерно так называется. При этом ты кнему подключиться можешь, а пропинговать нет.
Ботвин Дмитрий (2005-10-10 16:45:00) [6]-=S..S=- (10.10.05 15:01) [1]
"стандартная ошибка асинхронных неблокирующих сокет" - Инди работает тока в блокирующем режиме :-))
-=S..S=- (2005-10-10 16:01:00) [7]А вы попробуйте порядок пингуемых серверов поменять :) Может он принципиально не пингуеться :)
Dimich1978 (2005-10-10 15:21:00) [8]IdIcmpClient1.Active-нет такого.
про второе не скажу, видно только то что пингуется только один.
Пробовал и три компаненты бросить и собирать ответы с каждого Клиента,, то же самое.
-=S..S=- (2005-10-10 15:01:00) [9]а у компонента есть свойство что то типа IdIcmpClient1.Active ?
что бы пинговать надо сначала подконектиться что не известно .. подконектился или нет ? ... это раз ... а во вторых может просто стандартная ошибка асинхронных неблокирующих сокетов