注册 登录
编程论坛 Delphi论坛

Delphi 取得本机的网络IP

autosun 发布于 2009-08-12 10:35, 1018 次点击
我要知道本机的IP 不用命令行,用DELPHI完成,不是局域IP,而是网络IP怎么实现???
请教高手(高分找答案)
4 回复
#2
anthony6342009-08-12 18:43
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,winsock,
  StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.DFM}
 
procedure TForm1.Button1Click(Sender: TObject);
type
  TAddrList = array [0..20] of PInAddr;
  PAddrList = ^TAddrList;
var
  phent : PHostEnt;
  P: PAddrList;
  I : Integer;
begin
   phent := GetHostByName(pchar(edit1.text));
   if phent<>nil then
     begin
        I := 0;
        P := PAddrList(phent^.h_Addr_list);
        while P[I] <> nil do
        begin
            listbox1.items.Add(StrPas(inet_ntoa(P[I]^)));
            Inc(I)
        end
    end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
      WSAData : TWSAData;
begin
    edit1.text := 'www.bccn.net';
     if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
        raise Exception.Create('Winsock Version Error');
end;
 
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
     WSACleanUP;
end;
 
end.
 
#3
anthony6342009-08-12 19:07
看错了,你是想在局域网内获取本网络的公网ip,这个得利用一些网站提供的服务。 http://www.
#4
s9123601012009-09-13 17:03
能不能在ip138上面通过获取网叶源代码,查找关键字,在返回在叶面上..???
#5
amex582009-09-24 15:37
function getlocalip(var localip: string): boolean;
var
    hostent: phostent;
    ip: string;
    addr: pchar;
    buffer: array [0..63] of char;
    ginitdata: twsadata;
begin
  result := false;
  try
    wsastartup(2, ginitdata);
    gethostname(buffer, sizeof(buffer));
    hostent := gethostbyname(buffer);
    if hostent = nil then exit;
    addr := hostent^.h_addr_list^;
    ip := format('%d.%d.%d.%d', [byte(addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
    localip := ip;
    result := true;
  finally
    wsacleanup;
  end;
end;
1