怎么样得到本机IP地址,要简单一点的。(50分)

  • 主题发起人 主题发起人 yuiac
  • 开始时间 开始时间
Y

yuiac

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样得到本机IP地址,要简单一点的,最好不要引用多余的单元。
 
要先uses Winsock;

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;
 
//------------------------------------------------------------------------------
// 得到本地ip地址
function GetLocalIP : 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;
 
一般都是用上面两位的办法;在简单点的话,注册表里有,
比如:HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/.../Parameters/Tcpip
不过你要兼容不同的OS,注册表项会有所不同的!
 
var
wVersionRequested: WORD;
wsaData: TWSAData;
P: PHostEnt;
S: array[0..128] of char;
p2: PChar;
begin
{创建 WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);

{得到计算机名称}
GetHostName(@s,128);
p := GetHostByName(@s);
Edit1.Text := p^.h_Name;

{得到机器IP地址}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Edit2.Text := p2;

{释放 WinSock}
WSACleanup;
end;
 
多人接受答案了。
 
后退
顶部