Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

Как зная IP адрес компа в сети получить его имя? 


ctapik-net   (2002-01-18 06:52) [0]

Пробовал писать через gethostbyaddr, ничего не получилось, может у кого есть работающий пример, очень нужно. Заранее спасибо.



Anatoly Podgoretsky   (2002-01-18 09:51) [1]

Пример настолько простой, что просто смешно.

GetHostByAddr;
или с проверкой на ошибку if GetHostByAddr=nil then ShowMessages(...);



Anatoly Podgoretsky   (2002-01-18 09:54) [2]

Это если не использовать результат, а если результат нужен то

var
HostEnt : PHostEnt;

HostEnt := GetHostByAddr;



ctapik-net   (2002-01-18 13:26) [3]

Ну для меня это не так все просто, темболее ни разу этой функцией не пользовался.
Вот:
struct hostent FAR * gethostbyaddr (

const char FAR * addr,
int len,
int type
);


Parameters

addr

[in] A pointer to an address in network byte order.

len

[in] The length of the address.

type

[in] The type of the address.

Деляю так

Function GetHostNameByIP(IP : String) : String ;
Var
WSData : WSAData ;
wVersionRequested : Word ;
Len : Integer ;
P : PChar ;
HostEnt : PHostEnt ;
Begin
Result := "" ;
Try
If WSAStartup(wVersionRequested,WSData) = 0 Then Begin
Len := 260 ;
GetMem(P,Len) ;
StrPCopy(P,IP) ;
HostEnt := GetHostByAddr(P,Len,AF_INET) ;
If HostEnt<>Nil Then Begin
Result := HostEnt.h_name ;
End ;
FreeMem(P,Len) ;
End ;
Finally
WSACleanup ;
End ;
End ;

Но ничего не выходит!!!
Кстати если HostEnt <> Nil нужно освобождать из под него память или нет?



Wonder   (2002-01-18 14:17) [4]

var
pHostEn : PHostEnt;
lwsaData : WSAData;
destAddress : In_Addr;
destHost : PChar;
begin
destHost := "217.106.234.193";
destAddress := In_Addr(inet_addr(destHost));
if destAddress.S_addr = u_long(INADDR_NONE) then
//введен не IP адрес
begin
ShowMessage("Invalid IP");
Exit;
end;
WSAStartup($0101, lwsaData);
pHostEn := gethostbyaddr(@destAddress, 4, PF_INET);
if (pHostEn = nil) then
begin
ShowMessage("Error "+IntToStr(WSAGetLastError()));
WSACleanup;
Exit;
end;
WSACleanup;
ShowMessage(pHostEn^.h_name);
end;



ctapik-net   (2002-01-18 14:41) [5]

Спасибо большое Wonder! Оказывается мне еще учится и учится :)



Alexander   (2002-01-20 11:22) [6]

А у меня на строке
destAddress := In_Addr(inet_addr(destHost));
выдаётся "Access violation";



bw3d   (2002-02-13 07:57) [7]

ну вообщем всё клёво работает .......
я делал примерно так же .....
так что проблем ни у кого быть недолжно
а насчёт Access violation хз может версия делфы не та или винда сглючнула ........ бывае.




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.043 c
1-69853           SkySat                2002-04-08 14:53  2002.04.22  
ALt+Ctrl+Del


7-70047           Tsatur Soft           2002-01-24 23:05  2002.04.22  
Шрифт


6-69961           DimaIv                2002-02-04 21:56  2002.04.22  
Возможна ли докачка в FastNet и как её сделать?


3-69745           IronHawk              2002-03-29 15:48  2002.04.22  
Приветствую Мастеров ! Как удалять одинаковые строки в базе?


4-70068           Fredy                 2002-02-16 23:22  2002.04.22  
Как запустить ScreenSaver ?