Как по IP адресу получить HostName (и обратно) |
Previous Top Next |
Code: |
function TGenericNetTask.GetPeerOrigin( const ALogin : String ) : DWORD; const AddressStrMaxLen = 256; var len : DWORD; ptr : PChar; pHE : PHostEnt; addr : TSockAddr; buf : Array [0..AddressStrMaxLen-1] of Char; begin if FNet=nil then raise ESocketError.Error(-1,ClassName+'.GetPeerAds: Net is not defined',WSAHOST_NOT_FOUND); len := SizeOf(TSockAddr); if getpeername(FSocket,addr,len)<>0 then RaiseLastSocketError(-1,ClassName+'.GetPeerAds: getpeername()'); case addr.sin_family of AF_INET: // TCP/IP
begin pHE := gethostbyaddr( PChar(@addr.sin_addr), SizeOf(TInAddr), AF_INET ); if pHE=nil then RaiseLastSocketError(-1,ClassName+'.GetPeerAds: gethostbyaddr()'); FPeerNodeName := pHE^.h_name; if FNet.NodeByName(FPeerNodeName)=nil then begin ptr := StrScan(pHE^.h_name,'.'); if ptr<>nil then FPeerNodeName := Copy(pHE^.h_name,1,ptr-pHE^.h_name); end; end;
else len := AddressStrMaxLen; if WSAAddressToStringA(sin,sinlen,nil,buf,len)<>0 then RaiseLastSocketError(-1,ClassName+'.GetPeerAds: WSAAddressToStringA()'); ptr := StrRScan(buf,':'); if ptr<>nil then len := ptr-buf; FPeerNodeName := Copy(buf,1,len); end; Result := FNet.EncodeAddress(ALogin,FPeerNodeName,'',[bLoginIdRequired,bNodeIdREquired,bR aiseError]); end; {TGenericNetTask.GetPeerOrigin} |
Alex Konshin
mailto:alexk@msmt.spb.su"
(2:5030/217)
©Drkb::03353
Автор: StayAtHome
Взято с Vingrad.ru http://forum.vingrad.ru