Home

Page 230
Page 230
background image

Сеть на низком уровне 223

else

begin

 gethostbyname(PChar(AddressEdit.Text));

 , 0);

if HostEnt <> nil then

begin

with InAddr,

 do

begin

 . s_bl : =

 ;

 s_b2 : =

 [ 1  ;

 :=

end;

end

end;
Result

 InAddr;

end;

В самом начале проверяется введенный пользователем текст. Если в тексте

есть точка, то я считаю, что введен IP-адрес машины, например

В этом случае нужно просто преобразовать его в нужный формат с помо-

щью

 inet_addr.

Если точки нет, то введено имя машины. В этом случае запускается функ-
ция

 которая получает IP-адрес по имени машины, и потом

полученный адрес переводим в нужный формат.
Эта проверка правильна только для локальной сети, в Интернете лучше
в любом случае использовать gethostbyname. Это связано с тем, что адрес

сервера выглядит так:

 В таком адресе присутствует точка, но

это не IP-адрес, и произойдет ошибка. Именно поэтому я советую для бое-
вых условий убрать первоначальную проверку и оставить вот такой вид:

function

 TInAddr;

var

HostEnt: PHostEnt;

InAddr: TInAddr;

begin

HostEnt := gethostbyname(PChar(AddressEdit.Text));

 SizeOf (InAddr) , 0) ;

if HostEnt <> nil then

begin


Copyright © 2020 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.