如何取本机所在网络的公网IP?

解决方案 »

  1.   

    使用TIdHTTP控件 在Indy Clients页面var
      ip:string;begin 
      Ip := IdHTTP1.Get('http://www.bliao.com:2000/ip.phtml');
      ShowMessage(Ip);
    end;
      

  2.   

    function getip():string; 
    type 
       TaPInAddr = Array[0..10] of PInAddr; 
       PaPInAddr = ^TaPInAddr; 
     var 
       phe: PHostEnt; 
       pptr: PaPInAddr; 
       Buffer: Array[0..63] of Char; 
       I: Integer; 
       GInitData: TWSAData; 
       IP: String; 
    begin 
       try 
         WSAStartup($101, GInitData); 
         IP:='0.0.0.0'; 
         GetHostName(Buffer, SizeOf(Buffer)); 
         phe := GetHostByName(buffer); 
         if phe = nil then 
         begin 
           ShowMessage(IP); 
           Exit; 
         end; 
         pPtr := PaPInAddr(phe^.h_addr_list); 
         I := 0; 
         while pPtr^[I] <> nil do 
         begin 
           IP := inet_ntoa(pptr^[I]^); 
           Inc(I); 
         end; 
         WSACleanup; 
         getip:=ip; 
         ShowMessage(IP);//如果上网则为上网ip否则是网卡ip 
       finally 
       end; 
    end; 
      

  3.   

    楼上的代码就可以, 不过别忘了Uses WinSock单元.