如何获得本机ip?(10分)

  • 主题发起人 主题发起人 chirenmengyu
  • 开始时间 开始时间
C

chirenmengyu

Unregistered / Unconfirmed
GUEST, unregistred user!
有没有现成的函数返回一个string?
 
uses
WinSock,SysUtils;
function TWebMain.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;
 
下面的过程可以列举你机器的所有IP地址,当然也包括Lan和Internet,使用方法:
用语句Memo1.Lines.Add('本机IP地址:' + LocalIP);
就可以
//返回本机IP地址,多个地址之间用回车换行分隔

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
if i = 0 then
result := StrPas(inet_ntoa(pptr^^))
else
result := result + ',' + StrPas(inet_ntoa(pptr^^));
Inc(I);
end;
WSACleanup;
end;
 
接受答案了.
 
后退
顶部