-
Имеется ввиду нет ли явных опечаток. Надо покачто для десятичного представления. Например "0.0.7000.0" или "8.8.8.8.8.8" - явно не является IP-адресом. Интересует именно существует ли в Lazarus своя готовая кроссплатформенная функция. Навелосипедить-то я могу, но хочется по возможности использовать библиотечное. =)) З.Ы. На всякий случай, по теме: http://www.delphimaster.net/view/2-1317733017 Лазарус правда ругается на код с inet_addr+gethostbyname, и что ему не нравится я чёт не понял...
-
> существует ли в Lazarus своя готовая кроссплатформенная функция
- существует - но она однозначно кривая(наивный парсер через pos('.'), copy и val(int)) так что разбирайся - и что ему не нравится в inet_addr
-
Надо покачто для десятичного представленияну допустим, что она есть. ты счастлив, но теперь тебе нужны еще две функции одна должна сказать, что адрес ниже указан в восмеричной нотации, и проверять его нужно в третьей функции которая "более другая" чем первая, которая допустим уже есть. http://0255.0302.0334.0136
-
даже допустим что их есть три и даже тридцать три.
что в итоге? в итоге два разных варианта, но одинаковые своей беспомощностью
try inet_addr+gethostbyname exception showmessage('вронг аддресс! бат ай кан нот тел ю ватс там вронг'); end
if address_nod_valid(myaddress) then showmessage('аддрессиз стил вронг! анд ай стил каннот телью энисинг что там вронг');
-
Спасибо!
> так что разбирайся - и что ему не нравится в inet_addr
Да я просто читал ту ветку, читал, дай думаю скопипастю кусок кода, запущу, гляну что да как. Не компилит. Просто удивился сему.
> существует - но она ...
эм... Дак а название-то еёное можна услышать?))
> ... но теперь тебе нужны еще две функции ...
эм..... Не-а. Не нужны. %) Специфика задачи. Должно быть в десятичной в 99% случаев. Вероятность что когда-либо понадобится в другой - крайне мелкая.
-
дело не в вероятностях.
а дело в том, что функция эта ничего тебе не даст сверх того, что у тебя и так уже есть.
-
> http://0255.0302.0334.0136 http://173.0302.0334.0x5E\lazarus\fpc\3.0.2\source\packages\rtl-extra\src\inc\sockets.inc function StrToHostAddr(IP : AnsiString) : in_addr ;
Var
Dummy : AnsiString;
I,j,k : Longint;
Temp : in_addr;
begin
strtohostaddr.s_addr:=0; For I:=1 to 4 do
begin
If I<4 Then
begin
J:=Pos('.',IP);
If J=0 then
exit;
Dummy:=Copy(IP,1,J-1);
Delete (IP,1,J);
end
else
Dummy:=IP;
Val (Dummy,k,J);
array4int(temp.s_addr)[i]:=k;
If J<>0 then Exit;
end;
strtohostaddr.s_addr:=ntohl(Temp.s_addr);
end; - но для нее http://100500.-17.&334.%1010101 - будет вполне правильным...
-
но самое забавное, что StrToHostAddr('0255.0302.0334.0136') - приведёт совершенно в другое место...
-
-
|