GetHostName與GetHostByName的使用.


function gethostbyname(name: PAnsiChar): PHostEnt; stdcall; // 通過域名或者主機命返回IP地址. 傳進去的參數是一個域名或者主機名.返回值是一個Hostent指針結構.(如果傳進去的是一個空字符串,那么返回的是本機的主機名與IP地址)

function gethostname(name: PAnsiChar; len: Integer): Integer; stdcall;// 得到本機主機名或者域名.有兩個參數,一個是用來存放主機名或者域名的變量,一個是緩沖區的大小.

 

PHostEnt在delphi定義如下
type
PHostEnt = ^THostEnt;
{$EXTERNALSYM hostent}
hostent = record
h_name: PChar; //主機名
h_aliases: ^PChar; //別名
h_addrtype: Smallint;
h_length: Smallint;
case Byte of
0: (h_addr_list: ^PChar);
1: (h_addr: ^PChar) //IP地址
end;
THostEnt = hostent;

 

 

 以下是一個小例子------------------------------------------------------------------------

 

procedure TForm1.Button2Click(Sender: TObject);
var
  WData: TWSAData;   //WSAStartup必須用到的結構類型.
  HEnt: PHostEnt;
  ClName, IPad: string;
begin
  WSAStartup(2, WData); // 初始化,第一個參數是Socket的版本,第二個它會在這個結構體中返回WinSock庫的一些信息,如版本號,監聽隊列的大小,你能創建的最多的socket數目,等等。
  //Gethostname(PAnsiChar(ClName), 255); 得到本機主機名或者域名.
  HEnt := GetHostByName(PAnsiChar('www.google.com.hk')); // 通過域名或者主機命返回IP地址.  傳進去的參數是一個域名或者主機名.返回值是一個Hostent結構.(如果傳進去的是一個空字符串,那么返回的是本機的主機名與IP地址)
  with HEnt^ do
  IPad := Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]),Byte(h_addr^[2]), Byte(h_addr^[3])]); //格式化IP地址
  Edit1.Text := HEnt^.h_name; // 主機名
  Edit2.Text := IPad; // 得到ip
  WSACleanup; // 釋放WSAStartup,一個程序中可以多次調用WSAstartup,但是都必須得即使釋放.
end;
//----------------------------------------------------------------------------------------------- 上面代碼執行完之后結果為
Edit1.Text := www-wide.l.google.com;
Edit2.Text := 74.125.71.199;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM