请教如何得到本机的IP地址列表?(50分)

  • 主题发起人 主题发起人 小人物
  • 开始时间 开始时间

小人物

Unregistered / Unconfirmed
GUEST, unregistred user!
我的机器有两片网卡,一片用于局域网(设置了局域网的IP),一片接入互联网(设置了互联网的IP),
问如何得到这两个IP地址?
 
从注册表中找
 
份太少了。。。
 
function Tform1.LookupIP: String;
type PPInAddr= ^PInAddr;
var
wsaData: TWSAData;
HostInfo: PHostEnt;
HostName: Array[0..255] of Char;
Addr: PPInAddr;
begin
Result:='';
if WSAStartup($0101, wsaData)<>0 then exit;
try
if gethostname(HostName, SizeOf(HostName)) <> 0 then exit;
HostInfo:= gethostbyname(HostName);
if HostInfo=nil then Exit;
Addr:=Pointer(HostInfo^.h_addr_list);
if (Addr=nil) or (Addr^=nil) then exit;
Result:=StrPas(inet_ntoa(Addr^^));
inc(Addr);
while Addr^<>nil do begin
Result:=Result+^M^J+StrPas(inet_ntoa(Addr^^));
inc(Addr);
end;
finally
WSACleanup;
end;
end;
 
to 淡淡的笑,
好像只能得到一个IP,我要的是返回值为一个列表(最好是TstringList)
to liutan
你要帮我解决了难题,我再给你加分,如何?

拜托!
 
乱说!!你没试过就不要乱说... 我的程序里面用到的..用得好好的..我分配了4个IP,,一样
在用.

你没看到这句? Result:=Result+^M^J+StrPas(inet_ntoa(Addr^^));
 
没有研究,顺路而过,贴一个原来的贴子

问题的标题是:各位高人:如何获得计算机 IP 地址,不胜感激!!!(100分)
问题的分类是:局域网 / 通讯 , 分坛主: netwind, 分坛主: cAkk

来自:woo 时间:01-2-16 20:08:36 ID:456067
如何获得计算机 IP 地址,不胜感激!!!,不会用getcomputername Function?





--------------------------------------------------------------------------------
来自:delphisnail 时间:01-2-16 20:22:24 ID:456070
以前有讨论,而且也有控件的




--------------------------------------------------------------------------------
来自:Jams 时间:01-2-16 22:15:37 ID:456124
>>



--------------------------------------------------------------------------------
来自:xk 时间:01-2-16 22:30:55 ID:456133
function TNetwork.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 not assigned(phe) 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;




--------------------------------------------------------------------------------
来自:wind2000 时间:01-2-16 23:54:32 ID:456173
function GetLocalIP: string;
//获得本地IP地址
var
p : PHostEnt;
s : array[0..128] of char;
sIP : pchar;
begin
{得到计算机名称}
GetHostName(@s, 128);
p := GetHostByName(@s);
//p^.h_Name-->计算机名
{得到机器IP地址}
sIP := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Result := sIP;
end;





--------------------------------------------------------------------------------
来自:caowei 时间:01-2-17 10:30:45 ID:456364
使用XK同学的方法,再加上:
uses winsock;



--------------------------------------------------------------------------------
来自:djdsz 时间:01-2-17 10:35:26 ID:456372
要得到其他机器IP,写上
buffer:=HostName



--------------------------------------------------------------------------------
来自:weicong 时间:01-2-18 1:14:18 ID:456833
这个问题讨论了N+X遍了,我也回答过Y+X次了,先查一下以前的问题,
再提问好吗?



--------------------------------------------------------------------------------
来自:zhou_bo_nj 时间:01-2-18 2:46:46 ID:456882
给你一段用C++Builder写的源代码,不过在Delphi中也大同!
int __fastcall GetHostIPAddress(
AnsiString *Apas_ComputerName,
AnsiString *Apas_IPAddress
)
{
struct hostent *hos_Host;
struct in_addr in_Host_addr;
char c_ComputerName[80];
char *pc_Ip,*pc_ptr;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,0);
if(!(WSAStartup(wVersionRequested,&amp;wsaData)==0))
return -1;
if(LOBYTE(wsaData.wVersion)!=2||
HIBYTE(wsaData.wVersion)!=0)
{
WSACleanup();
return -1;
}
if(gethostname(c_ComputerName,80)==SOCKET_ERROR)
return -1;
if(!(hos_Host=gethostbyname(c_ComputerName)))
return -1;
memset((void *)&amp;in_Host_addr,sizeof(in_Host_addr),0);
in_Host_addr.s_addr=*((unsigned long *)hos_Host->h_addr_list[0]);
if(!(pc_ptr=inet_ntoa(in_Host_addr)))
return -1;
WSACleanup();
pc_Ip=new char[strlen(pc_ptr)+1];
strcpy(pc_Ip,pc_ptr);
*Apas_ComputerName=AnsiString(hos_Host->h_name);
*Apas_IPAddress=AnsiString(pc_Ip);
return 0;
}



 
淡淡的笑,对不起啊,我先试一下,马上给分!
 
淡淡的笑大侠,

小人物献上白银50两作谢,万望笑纳!

小人物太崇拜你了!
 
接受答案了.
 
后退
顶部