如何获得本机的IP地址(for win98 and for win2000)(50分)

  • 主题发起人 主题发起人 jyh_jack
  • 开始时间 开始时间
J

jyh_jack

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位大哥大姐:
如何获得本机的IP地址即可用在win9x中也可以用在win2000中,
可列出代码。。
 
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;
 
uses {...,}Winsock;

procedure ShowHostName;
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);
ShowMessage(Format('Computer name is ''%s''.', [p^.h_Name]));

{IP地址}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
ShowMessage(Format('IP address is %s.',[p2]));

WSACleanup;
end;

 
两位前辈高人,小弟十在是愚钝,为什么我加入SysUtils单元时,不能成功编释呢??

求教。。
 
//***************************************************************
// 说明:
// 返回计算机中所有的IP地址信息。
// 参数:
// 无
// 返回:
// 返回IP地址,多个IP地址间以逗号隔开
//****************************************************************
function GetAllLocalIPAddr: String;
type
PIntArray = array[0..MaxInt div 4 - 1] of PInteger;
PPIntArray = ^PIntArray;
var
Phe: PHostEnt;
szHostName: array[0..128] of char;
initData: TWSAData;
intIndex: integer;
InAddr: TInAddr;
begin
WSAStartup($101, initdata);
try
GetHostName(szHostName, 128);
Phe := GetHostByName(szHostName);
if Phe = nil then Result := '0.0.0.0'
else
begin
//Phe^.h_addr_list[0]是第1个,Phe^.h_addr_list[1]是第2个
//最后一个值是NIL表示结束
Result := '';
for intIndex := 0 to 9 do
begin
if nil = PPIntArray(Phe^.h_addr_list)[intIndex] then break;
InAddr.S_addr := longint(PLongInt(PPIntArray(Phe^.h_addr_list)[intIndex])^);
if Trim(Result) <> '' then Result := Result + ',';
Result := Result + inet_ntoa(InAddr);
end;
end;
finally
WSACleanup;
end;
end;
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
819
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部