如何获得本机器的IP地址,要求适用于win98和win2000以上的系统(50分)

  • 主题发起人 主题发起人 gojohnnywong
  • 开始时间 开始时间
G

gojohnnywong

Unregistered / Unconfirmed
GUEST, unregistred user!
如何获得本机器的IP地址,要求适用于win98和win2000以上的系统
 
点击:程序--运行(然后输入cmd)--然后在弹出来的面板上输入ipconfig
 
//Delphi7:
uses IdStack;

var
s: TIdStack;
ip: string;
begin
s := TIdStack.CreateStack;
ip := s.LocalAddress;//这里就是本机的IP地址
s.free;
end;
 
转:
function LocalIP : 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;
begin
WSAStartup($101, GInitData);
Result := ``;
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^ <> nil do begin
result:=StrPas(inet_ntoa(pptr^^));
Inc(I);
end;
WSACleanup;
end;


来自:redgum, 时间:2001-8-30 20:40:00, ID:609598
(ipconfig) or (winipcfg)


来自:飞来石, 时间:2001-9-3 21:24:00, ID:610641
uses Winsock;


...


function getIPs: TStrings;

type

TaPInAddr = Array[0..10] of PInAddr;

PaPInAddr = ^TaPInAddr;

var

phe: PHostEnt;

pptr: PaPInAddr;

Buffer: Array[0..63] of Char;

I: Integer;

GInitData: TWSAData;

begin

WSAStartup($101

GInitData);

Result:=TStringList.Create;

Result.Clear;

GetHostName(Buffer

SizeOf(Buffer));

phe := GetHostByName(buffer);

if phe = nil then

begin

Exit;

end;

pPtr := PaPInAddr(phe^.h_addr_list);

I := 0;

while pPtr^ <> nil do

begin

Result.Add(inet_ntoa(pptr^^));

Inc(I);

end;

WSACleanup;

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

memo1.Lines:=GetIps;

end;
 
//得到多张网卡的IP ,uses Winsock;
//格式:182.168.0.252#192.168.1.252#(以'#'隔开)
function GetLocalIPs: String;
type PPInAddr= ^PInAddr;
var
wsaData: TWSAData;
HostInfo: PHostEnt;
HostName: Array[0..255] of Char;
Addr: PPInAddr;
begin
Result:='';
if WSAStartup($0101, wsaData)<>0 then exit;
try
if gethostname(HostName, SizeOf(HostName)) <> 0 then exit;
HostInfo:= gethostbyname(HostName);
if HostInfo=nil then Exit;
Addr:=Pointer(HostInfo^.h_addr_list);
if (Addr=nil) or (Addr^=nil) then exit;
Result:=StrPas(inet_ntoa(Addr^^)) + '#';
inc(Addr);
while Addr^<>nil do begin
Result:=Result +StrPas(inet_ntoa(Addr^^)) + '#';
inc(Addr);
end;
finally
WSACleanup;
end;
end;
 
以上方法不能在win98上实现
 
第6章 网络技术开发实例


实例104 获取本地计算机的名称和IP地址


本程序介绍如何获取本地计算机的名称和IP地址。



向窗体上添加两个TLabel组件、两个TEdit组件和一个TButton组件,设计完成的主界面如图6-8所示。



图6-8 主界面



首先在程序的uses段中添加对WinSock的引用,然后添加一个GetHostName自定义函数,在其中调用GetComputerName函数获取计算机名称,响应代码如下:

function TfrmMain.GetHostName:String;

var

ComputerName: array[0..MAX_COMPUTERNAME_LENGTH+1] of char;

Size: Cardinal;

begin

result:='';

Size := MAX_COMPUTERNAME_LENGTH+1;

GetComputerName(ComputerName, Size);

Result:=StrPas(ComputerName);

end;

添加一个NameToIP自定义函数,在其中调用GetHostByName函数根据计算机名称获取计算机的IP地址,响应代码如下:

function TfrmMain.NameToIP(Name:string):String;

var

WSAData: TWSAData;

HostEnt: PHostEnt;

begin

result:='';

WSAStartup(2, WSAData);

HostEnt := GetHostByName(PChar(Name));

if HostEnt <> nil then

begin

with HostEnt^ do

result:= Format('%d.%d.%d.%d',[Byte(h_addr^[0]), Byte(h_addr^[1]),

Byte(h_addr^[2]), Byte(h_addr^[3])]);

end;

WSACleanup;

end;



程序代码如下:

unit Unit1;

interface

uses

Windows, Messages, Sys Utils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, WinSock;



type

TfrmMain = class(TForm)

btnStart: TButton;

edtIP: TEdit;

edtName: TEdit;

Label1: TLabel;

Label2: TLabel;

function GetHostName:String;

procedure btnStartClick(Sender: TObject);

function NameToIP(Name:string):String;

private

{ Private declarations }

public

{ Public declarations }

end;



var

frmMain: TfrmMain;

implementation

{$R *.dfm}



function TfrmMain.GetHostName:String;

var

ComputerName: array[0..MAX_COMPUTERNAME_LENGTH+1] of char;

Size: Cardinal;

begin

result:='';

Size := MAX_COMPUTERNAME_LENGTH+1;

GetComputerName(ComputerName, Size);

Result:=StrPas(ComputerName);

end;



procedure TfrmMain.btnStartClick(Sender: TObject);

begin

edtName.Text:=GetHostName;

edtIP.Text:=NameToIP(edtName.Text);

end;



function TfrmMain.NameToIP(Name:string):String;

var

WSAData: TWSAData;

HostEnt: PHostEnt;

begin

result:='';

WSAStartup(2, WSAData);

HostEnt := GetHostByName(PChar(Name));

if HostEnt <> nil then

begin

with HostEnt^ do

result:= Format('%d.%d.%d.%d',[Byte(h_addr^[0]), Byte(h_addr^[1]),

Byte(h_addr^[2]), Byte(h_addr^[3])]);

end;

WSACleanup;

end;



end.



保存文件,然后按F9键运行程序,程序运行的初始画面如图6-9所示。

单击“开始”按钮,就会获取并显示本地计算机的名称和IP地址。程序运行结果如图6-10所示。



图6-9 程序运行的初始画面 图6-10 程序运行结果
 
放个FASTNET->NMHTTP控件, strIp:= NMHTTP.LocalIP;
 
后退
顶部