使用winsock取得本地多个IP地址的问题(100分)

  • 主题发起人 主题发起人 oocoolie
  • 开始时间 开始时间
O

oocoolie

Unregistered / Unconfirmed
GUEST, unregistred user!
[red]
//这段代码在c++ builer中运行正常,在VC中也正常[/red]
char szHostName[128];
String s;
struct hostent * pHost;
int i;
TStringList* ss;
ss=new TStringList();
if( gethostname(szHostName, 128) == 0 )
{
pHost = gethostbyname(szHostName);
for( i = 0; pHost!= NULL && pHost->h_addr_list!= NULL; i++ )
{
s=inet_ntoa (*(struct in_addr *)pHost->h_addr_list);
ss->Add(s);
}
}

[red]但如果改成在delphi中,则host^.h_addr_list则不是一个数组,报错[/red]
For i:=0 to (length(host^.h_addr_list)-1) do
begin
tmp_str:=host^.h_addr_list^;
Ips.Add(tmp_str);
end;
[red]如果改成下面这样,则正常,但只能取一个IP地址:[/red]
if host^.h_addr_list<>nil then
begin
tmp_str:=inet_ntoa(pinaddr(host.h_addr_list^)^);
Ips.Add(tmp_str);
end;
[red]查了帮助,h_addr_list的类型是一个指向指针的指针(char),报错应该是对的,但就是
想不明白在c++中为什么就可以那样用?[/red]
 
好象是用inc(host.h_addr_list^)得到下一个地址

c中可以用是因为c中指针跟数组实际上是同样的东西,可以以任何一种方式等效访问
 
我的问题中有解
http://www.delphibbs.com/delphibbs/dispq.asp?lid=750991
源程序是从 张磊 提供的程序来的
其中的方法
{取得本地计算机所有的IP地址}
procedure LocalIPs(slIPs : TStringList);
是你要的
 
后退
顶部