function GetIP:string; //此函数实际是获取最后一个IP地址的字符串,一般是拨号后动态分配的IP地址。 //如果,主机还未拨号上网,则返回的是本地局域网的IP地址 var WSAData:TWSAData; HostName:array[0..MAX_COMPUTERNAME_LENGTH] of Char; HostEnt:PHostEnt; LastIP:PInAddr; IPList:^PInAddr; begin result:=''''; if 0=WSAStartup(MAKEWORD(1,1), WSAData) then try if 0=gethostname(HostName, MAX_COMPUTERNAME_LENGTH+1) then begin HostEnt:=gethostbyname(HostName); if HostEnt<>nil then begin IPList:=Pointer(HostEnt^.h_addr_list); repeat LastIP:=IPList^; INC(IPList); until IPList^=nil; if LastIP<>nil then result:=inet_ntoa(LastIP^); end; end; finally WSACleanup; end; end;procedure TFrmmain.IP2Click(Sender: TObject); begin showmessage(''ip地址为: ''+getip); end;
function TFrmChat.GetHostName: String; var Buf: Array[0..255] of char; GInitData: TWSADATA; wVerReq: Word; begin wVerReq := MakeWord(2, 0); WSAStartup(wVerReq, GInitData); Result := ''; GetHostName(Buf, Sizeof(Buf)); Result := StrPas(Buf); WSACleanup; end;procedure TFrmChat.Button2Click(Sender: TObject); begin showmessage(HostName); showmessage(LocalIP); end;function TFrmChat.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(MakeWord(2,0), 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;
function LocalIP:string;
typeTaPInAddr = array [0..10] of PInAddr;PaPInAddr = ^TaPInAddr;varphe : PHostEnt;pptr : PaPInAddr;Buffer : array [0..63] of char;I : Integer;GInitData : TWSADATA;beginWSAStartup($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 beginresult:=StrPas(inet_ntoa(pptr^[I]^));Inc(I);end;WSACleanup;end;========================================program get_ip;useswinsock,sysutils;VARch : ARRAY[1..32] OF Char;i : Integer;WSData: TWSAData;MyHost: PHostEnt;beginIF WSAstartup(2,wsdata)<>0 THENBEGINWriteln('can''t start Winsock: Error ',WSAGetLastError);Halt(2);END;tryIF getHostName(@ch[1],32)<>0 THENBEGINWriteln('getHostName failed');Halt(3);END;exceptWriteln('getHostName failed');halt(3);end;MyHost:=GetHostByName(@ch[1]);IF MyHost=NIL THENBEGINWriteln(GetHostName('+StrPas(@ch[1])+') failed : Error'+IntToStr(WSAGetLastError));Halt(4);ENDELSEBEGINWrite('address ');FOR i:=1 TO 4 DOBEGINWrite(Ord(MyHost.h_addr^[i-1]));IF i<4 THENthen write('.')ELSEwriteln;END;END;end.===========================================
也是在网上查的
//此函数实际是获取最后一个IP地址的字符串,一般是拨号后动态分配的IP地址。
//如果,主机还未拨号上网,则返回的是本地局域网的IP地址
var
WSAData:TWSAData;
HostName:array[0..MAX_COMPUTERNAME_LENGTH] of Char;
HostEnt:PHostEnt;
LastIP:PInAddr;
IPList:^PInAddr;
begin
result:='''';
if 0=WSAStartup(MAKEWORD(1,1), WSAData) then
try
if 0=gethostname(HostName, MAX_COMPUTERNAME_LENGTH+1) then
begin
HostEnt:=gethostbyname(HostName);
if HostEnt<>nil then
begin
IPList:=Pointer(HostEnt^.h_addr_list);
repeat
LastIP:=IPList^;
INC(IPList);
until IPList^=nil;
if LastIP<>nil then
result:=inet_ntoa(LastIP^);
end;
end;
finally
WSACleanup;
end;
end;procedure TFrmmain.IP2Click(Sender: TObject);
begin
showmessage(''ip地址为: ''+getip);
end;
上都有
的localip属性就可以了
只要加入TIdIPWatch控件,然后调用IdIPW.LocalIP就可以得到IP地址了
var
Buf: Array[0..255] of char;
GInitData: TWSADATA;
wVerReq: Word;
begin
wVerReq := MakeWord(2, 0);
WSAStartup(wVerReq, GInitData);
Result := '';
GetHostName(Buf, Sizeof(Buf));
Result := StrPas(Buf);
WSACleanup;
end;procedure TFrmChat.Button2Click(Sender: TObject);
begin
showmessage(HostName);
showmessage(LocalIP);
end;function TFrmChat.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(MakeWord(2,0), 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;