关于获取本机IP的问题(100分)

  • 主题发起人 FreeFish
  • 开始时间
F

FreeFish

Unregistered / Unconfirmed
GUEST, unregistred user!
我在学习一个获取本机IP的函数,可惜有些语句我看不懂,希望各位大虾能够详细指点,
以解心头迷团,万分感谢!

function LocalIP : String;
type
TaPInAddr = Array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
// (问题1 :为什么要定义一个TaPInAddr类型,PInAddr是何指针类型?)
var
Phe : PHostEnt;
//(问题2 : HostEnt结构中h_addr_list属性的内容是什么?)
PPtr : PaPInAddr;
Buffer : Array[0..63] of Char;
i : integer;
GInitData : TWSAData;
begin
WSAStartUp(2,GInitData);
Result := '';
GetHostName(Buffer,SizeOf(Buffer));
Phe := GetHostByName(Buffer);
if Phe=nil then Exit;
Pptr := PaPInAddr(Phe^.h_addr_list);
//(问题3 : 上面这条语句是什么意思,指针变量能够这样用吗?)
i := 0;
//(问题4 : 下面这个循环是什么意思? Result难道就是所获取的IP地址吗?为什么?)
While Pptr^<>nil do
begin
Result := StrPas(INet_Ntoa(Pptr^^));
Inc(i);
end;
end;
 
这个问题当时是Blade回答的,可惜他在DFW换新服务器以后再也没有上来了
我发邮件叫他了,过几天看看他来没有
 
请你跟我来:

  用鼠标左键单击Windows任务栏上的“开始”按钮,依次选择如下菜单:程序、
Borland Delphi 5、Help、MS SDK Help Files、Windows Sockets 2 Reference,此时你的
屏幕上面是不是打开“Windows Sockets 2 Reference”窗口?如果不是,请检查:一、你的
Delphi版本究竟是多少,请你进入相应的目录;二、你安装Delphi的时候是否
选择了安装MS SDK Help。
  在“Windows Sockets 2 Reference”窗口里面,点击索引,搜索“GetHostByName”,会
有你需要的所有问题的答案。(我英文也很Y,只是勉强能读懂,无法给你当翻译)
 
1,很低级,PaPInAddr就是指到TaPInAddr的指针;
2,主机名
3,强制指针类型转换
4,是的,里面主要是inet_ntoa函数
 
这是从别处找来的,希望对你有帮助!

uses winsock;
...
//取本机IP地址
function GetIPAddress: string;
var
phoste:pHostEnt;
Buffer:array[0..100] of char;
WSAData:TWSADATA;
begin
result:='';
if WSASTartup($0101, WSAData) <> 0 then exit;
GetHostName(Buffer,Sizeof(Buffer));
phoste:=GetHostByName(buffer);
if phoste = nil then
begin
result:='127.0.0.1';
end
else
result:=StrPas(inet_ntoa(PInAddr(phoste^.h_addr_list^)^));
WSACleanup;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=GETIPAddress;
end;

 
多人接受答案了。
 
顶部