引用Unit2,然后,调用getIP()。getIP()返回IP字符串。 unit Unit2; interface uses winsock,sysutils; // type // var ch:array[1..32] of char; wsData:TWSAData; myHost:PHostEnt; function getIP():string;forward; implementation function getIP():string; var i:integer; begin if WSAstartup(2,wsData)<>0 then begin Result:=’can’’t start winsock:error’; exit; end; try if getHostName(@ch[1],32)<>0 then begin result:=’getHostName failed’; exit; end; except result:=’getHostName failed’; exit; end; myHost:=GetHostByName(@ch[1]); if myHost=nil then begin result:=’GetHostName(’+StrPas(@ch[1])+’) failed:error’+IntToStr(WSAGetLastError); exit; end else begin //result:=’---’; for i :=1 to 4 do begin result:=result+IntToStr(Ord(myHost.h_addr^[i-1])); if i<4 then result:=result+’.’ else //result:=result+’---’; end; end; end; end.
uses Winsock; function HostToIP(Name: string; var Ip: string): Boolean; var wsdata : TWSAData; hostName : array [0..255] of char; hostEnt : PHostEnt; addr : PChar; begin WSAStartup ($0101, wsdata); try gethostname (hostName, sizeof (hostName)); StrPCopy(hostName, Name); hostEnt := gethostbyname (hostName); if Assigned (hostEnt) then if Assigned (hostEnt^.h_addr_list) then begin addr := hostEnt^.h_addr_list^; if Assigned (addr) then begin IP := Format ('%d.%d.%d.%d', [byte (addr [0]), byte (addr [1]), byte (addr [2]), byte (addr [3])]); Result := True; end else Result := False; end else Result := False else begin Result := False; end; finally WSACleanup; end end;procedure TForm1.Button1Click(Sender: TObject); var ip:string; begin HostToIP('whh',ip); showmessage(ip); end;
定义一个函数,调用它就可以了,取得本机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^[I] <> nil do begin result:=StrPas(inet_ntoa(pptr^[I]^)); Inc(I); end; WSACleanup; end; program get_ip; uses winsock,sysutils; VAR ch : ARRAY[1..32] OF Char; i : Integer; WSData: TWSAData; MyHost: PHostEnt; begin IF WSAstartup(2,wsdata)<>0 THEN BEGIN Writeln('can''t start Winsock: Error ',WSAGetLastError); Halt(2); END; try IF getHostName(@ch[1],32)<>0 THEN BEGIN Writeln('getHostName failed'); Halt(3); END; except Writeln('getHostName failed'); halt(3); end;MyHost:=GetHostByName(@ch[1]); IF MyHost=NIL THEN BEGIN Writeln(GetHostName('+StrPas(@ch[1])+') failed : Error '+IntToStr(WSAGetLastError)); Halt(4); END ELSE BEGIN Write('address '); FOR i:=1 TO 4 DO BEGIN Write(Ord(MyHost.h_addr^[i-1])); IF i<4 THEN then write('.') ELSE writeln; END; END; end.
procedure TForm1.Button1Click(Sender: TObject); vardd:phostent; sip:string; begin dd:=GetHostByName(pchar(iplist.Items[iplist.ItemIndex])); with dd^ do sIP := Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]); showmessage(sip); //可以是 计算机名或地址 end;
uses
winsock,sysutils;
// type
//
var
ch:array[1..32] of char;
wsData:TWSAData;
myHost:PHostEnt;
function getIP():string;forward;
implementation function getIP():string;
var
i:integer;
begin
if WSAstartup(2,wsData)<>0 then
begin
Result:=’can’’t start winsock:error’;
exit;
end;
try
if getHostName(@ch[1],32)<>0 then
begin
result:=’getHostName failed’;
exit;
end;
except
result:=’getHostName failed’;
exit;
end;
myHost:=GetHostByName(@ch[1]);
if myHost=nil then
begin
result:=’GetHostName(’+StrPas(@ch[1])+’) failed:error’+IntToStr(WSAGetLastError);
exit;
end
else
begin
//result:=’---’;
for i :=1 to 4 do
begin
result:=result+IntToStr(Ord(myHost.h_addr^[i-1]));
if i<4 then
result:=result+’.’
else
//result:=result+’---’;
end;
end;
end;
end.
function HostToIP(Name: string; var Ip: string): Boolean;
var
wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar;
begin
WSAStartup ($0101, wsdata);
try
gethostname (hostName, sizeof (hostName));
StrPCopy(hostName, Name);
hostEnt := gethostbyname (hostName);
if Assigned (hostEnt) then
if Assigned (hostEnt^.h_addr_list) then begin
addr := hostEnt^.h_addr_list^;
if Assigned (addr) then begin
IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
byte (addr [1]), byte (addr [2]), byte (addr [3])]);
Result := True;
end
else
Result := False;
end
else
Result := False
else begin
Result := False;
end;
finally
WSACleanup;
end
end;procedure TForm1.Button1Click(Sender: TObject);
var ip:string;
begin
HostToIP('whh',ip);
showmessage(ip);
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^[I] <> nil do begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
program get_ip;
uses
winsock,sysutils;
VAR
ch : ARRAY[1..32] OF Char;
i : Integer;
WSData: TWSAData;
MyHost: PHostEnt;
begin
IF WSAstartup(2,wsdata)<>0 THEN
BEGIN
Writeln('can''t start Winsock: Error ',WSAGetLastError);
Halt(2);
END;
try
IF getHostName(@ch[1],32)<>0 THEN
BEGIN
Writeln('getHostName failed');
Halt(3);
END;
except
Writeln('getHostName failed');
halt(3);
end;MyHost:=GetHostByName(@ch[1]);
IF MyHost=NIL THEN
BEGIN
Writeln(GetHostName('+StrPas(@ch[1])+') failed : Error
'+IntToStr(WSAGetLastError));
Halt(4);
END
ELSE
BEGIN
Write('address ');
FOR i:=1 TO 4 DO
BEGIN
Write(Ord(MyHost.h_addr^[i-1]));
IF i<4 THEN
then write('.')
ELSE
writeln;
END;
END;
end.
vardd:phostent;
sip:string;
begin
dd:=GetHostByName(pchar(iplist.Items[iplist.ItemIndex]));
with dd^ do
sIP := Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
showmessage(sip); //可以是 计算机名或地址
end;