关于网友提出的“ 如何 获取 本机的 Ip 地址 (急,在线等)”问题疑问,本网通过在网上对“ 如何 获取 本机的 Ip 地址 (急,在线等)”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 如何 获取 本机的 Ip 地址 (急,在线等)描述:
如何 获取 本机的 Ip 地址 (急,在线等)
用社么 函数?
解决方案1:
uses winsock;
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;
var
strIP:string;
begin
if GetLocalIP(strIP) then
Caption:=strip;
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^[I] <> nil do begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
procedure TForm1.Button4Click(Sender: TObject);{查找本机的ip地址}
var
ch: ARRAY[1..32] OF Char;
i: Integer;
WSData: TWSAData;
MyHost: PHostEnt;
a, b: string;
begin
if WSAstartup(2,wsdata)<>0 then
begin
Edit1.Text := 'can''t start Winsock: Error ' + IntToStr(WSAGetLastError);
Halt(2);
end;
try
IF getHostName(@ch[1],32)<>0 then
begin
Edit1.Text := 'getHostName failed';
Halt(3);
end;
except
Edit1.Text := 'getHostName failed';
halt(3);
end;
MyHost:=GetHostByName(@ch[1]);
if MyHost=NIL then
begin
Edit1.text := (' +GetHostName('+StrPas(@ch[1])+'), failed : Error'+IntToStr(WSAGetLastError));
Halt(4);
end
else
begin
a := '本机IP地址为 :';
for i:=1 to 4 do
begin
b := intToStr(Ord(MyHost.h_addr^[i-1]));
if i<4 then
b := b + '.';
a := a + b;
end;
end;
Edit1.Text := a;
end;
//获取本机IP地址
//InternetIP 是否取得InternetIP地址 否则为网卡地址
Function GetLocalIp(InternetIP:boolean):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
Screen.Cursor := crHourGlass;
try
WSAStartup($101, GInitData);
IP:='0.0.0.0';
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then
begin
ShowMessage(IP);
Result:=IP;
Exit;
end;
pPtr := PaPInAddr(phe^.h_addr_list);
if InternetIP then
begin
I := 0;
while pPtr^[I] <> nil do
begin
IP := inet_ntoa(pptr^[I]^);
Inc(I);
end;
end
else
IP := inet_ntoa(pptr^[0]^);
WSACleanup;
Result:=IP;//如果上网则为上网ip否则是网卡ip
finally
Screen.Cursor := crDefault;
end;
end;