Форум: "Сети";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизПингуем по длинному 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c