获得局域网中各机子的ip地址(50分)

  • 主题发起人 zhukairu
  • 开始时间
Z

zhukairu

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟做了一个程序,能得到整个局域网的计算机名了。但我想知道,通过什么方法可以得到他们的
ip地址了。我查了以前的帖子,没有特别合适自己的了。所以才又开了这个话题了。
有那位仁兄帮个忙了。哈,在这里谢谢了。
 
根据计算机名称得到IP地址
uses
WinSock;

function GetIPByName(AName: string): 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 := '';
StrPCopy(Buffer, AName);
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;
 
procedure TForm1.Button1Click(Sender: TObject);
var
wsaData:twsaData;
hostent:phostent;
scomputername,sip:string;
begin
scomputername:=edit1.Text;
wsastartup(2,wsadata);
hostent:=gethostbyName(pchar(scomputername));
if hostent<>nil then
begin
with hostent^ do
sIp:=format('%d.%d.%d.%d',[byte(h_addr^[0]),byte(h_addr^[1]),byte(h_addr^[2]),byte(h_addr^[3])]);
end;
Wsacleanup;
edit2.Text:=sIp;


end;

end.
这个是在论坛里找到的了。有谁能帮我解释一下了,wsastartup,代表什么意思,还有就是gethostbyname函数,
还有,我就是觉得有时候程序反应慢了。输入一个计算机名后,很慢才得到ip地址,但有时候倒是很快了。
这个快与慢是不是和我所在的局域网的情况有关了?[:)]
 
不是,一般速度都不快,如果是你机器里已经缓存了对方的机器的IP和名字那就
快多了,其他情况下很慢,是通过UDP来知道对方机器的名字
 
用Socket连接整个网段的地址,连上了,Socket自然知道该机器的信息了
 
顶部