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

Вниз

Пингуем по длинному IP   Найти похожие ветки 

 
XfroSt   (2005-11-22 15:39) [0]

Для пинга в дельфи я использую функцияю:

function TMF.ping(Host: string): boolean;
begin
IdICMPClient1.Host:=Host;                  // Указываем проверяемый адрес
IdICMPClient1.onReply:=IdICMPClient1Reply; // "Включаем" проверку ответов
try
 IdICMPClient1.Ping();
 Application.ProcessMessages()             // Ждем ответа
except
 on E: Exception do                        // Есть непонятный глюк при первом пинге "не своей" подсети
 begin                                     // при повторном все работает нормально
  if E.Message="Non-echo type response received" then
  begin
   IdICMPClient1.Ping();                   // Повторный пинг
   Application.ProcessMessages()           // Ждем ответа
  end
  else isOnline:=false                     // все-таки возникла ошибка - адрес не отвечает
 end
end;
IdICMPClient1.onReply:=nil;                // "Отключаем" ожидание ответа
Result:=isOnline;
isOnline:=false
end;


пингует тока адреса типа 192.168.20.247 а вот когда его преобразуешь в длинный адрес: 3232240887 то выскакивет ошибка! Хотя винда пингует оба адреса нормально.

как это исправить?
Или как перевести длинный адрес в короткий обратно?


 
Digitman ©   (2005-11-22 15:55) [1]


> Хотя винда пингует оба адреса нормально


что тебе "винда" ?

справка к св-ву TIdICMPClient.Host для Пушкина писана что ли ?)

там же черным по белому написано :

The address can be a computer name such as "wvnvm.wvnet.edu" or an IP address such as "129.71.2.4"


> как перевести длинный адрес в короткий обратно


inet_addr(), inet_ntoa()


> Application.ProcessMessages()            


в дан.контексте - пятое колесо телеге


 
Anatoly Podgoretsky ©   (2005-11-22 16:34) [2]

XfroSt   (22.11.05 15:39)  
Использовать другой компонент, который работает в соответствии с твоими требованиями.


 
XfroSt   (2005-11-22 16:40) [3]

спасибо я уже нашел выход и положения:
//Функция получает в качестве параметра строку, содержащую IP адрес, и возвращает  IP адрес в виде DWord значения
function IPtoDWORD(const s:string):DWORD;
var
   L:TStringList;
   b:packed array [0..3] of byte;
   i:integer;
begin
   Result:=0;
   L:=TStringList.Create;
   try
       L.Delimiter:=".";
       L.DelimitedText:=s;
       for i:=0 to 3 do
           b[3-i]:=StrToInt(L[i]);
       Result:=pdword(@b[0])^;
   finally
       L.Free
   end
end;
////Функция получает в качестве параметра  IP адрес в виде DWord значения, и возвращает строку, содержащую IP адрес
function DWORDtoIP(d:DWORD):string;
var
   L:TStringList;
   i:integer;
begin
   Result:="";
   L:=TStringList.Create;
   try
       L.Delimiter:=".";
       for i:=3 downto 0 do
           L.Add(IntToStr(byte(d shr (i shl 3))));
       Result:=L.DelimitedText;
   finally
       L.Free
   end
end;


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



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

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

Наверх




Память: 0.48 MB
Время: 0.061 c
2-1139992967
MIXER
2006-02-15 11:42
2006.03.05
печать формы


1-1138627845
Opilki_Inside
2006-01-30 16:30
2006.03.05
Перевод даты в строгу с заданым форматом


3-1137070389
UnDISCOvery
2006-01-12 15:53
2006.03.05
Запрос SQL к Access - как ускорить работу?


2-1140026301
Корешь
2006-02-15 20:58
2006.03.05
Массив из записей как с ним работать?


3-1136549778
Andron.Ru
2006-01-06 15:16
2006.03.05
Oracle sys_refcursor