Форум: "Сети";
Поиск по всему сайту: 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.72 MB
Время: 0.041 c
6-69965           Андрей Сенченко       2002-01-25 14:25  2002.04.22  
Проверить доступность сетевого диска


7-70042           kirya85               2002-01-17 22:29  2002.04.22  
Как програмно узнать сколько занимает памяти чужое приложение?


1-69822           Vcoder                2002-04-07 12:33  2002.04.22  
TBitmap.LoadFromResouceName - истина где-то рядом?


14-69990          Gaynew                2002-03-12 22:55  2002.04.22  
Минимальные системные требования Delphi5!!!


1-69861           Dimedrol              2002-04-02 10:47  2002.04.22  
Interprocess data X-change...