Author:InSun
Blog:http://yxmhero1989.blog.163.com/ http://hi.baidu.com/4safer
From:www.4safer.com
最近用Delphi写个综合性的软件,对于进程方面的也在研究,将会有文章出示。
在编写系统方面,要Delphi实现内外网IP的获取。
关键字:Delphi获取内外网IP
内网IP获取:在Delphi6以上的版本中,有一个IdIPWatch控件,它的功能就是检测网络在线状态和获取
IP地址。此控件在Indy Misc页面。用IDIPwatch1.LocalIP。当然也可以用Winsock,我们择便捷用。
可以这样写、procedure TForm1.IP1Click(Sender: TObject);
showmessage(IDIPwatch1.LocalIP)
end;
但是showmessage没额外参数,不能改标题,我们换做messagebox也很简单:
procedure TForm1.IP1Click(Sender: TObject);
var
Wnd:HWND;
begin
Wnd:=application.Handle;
messagebox(Wnd,PChar(IDIPwatch1.LocalIP),PChar(InSun),MB_OK);
end;
外网Ip获取:
Delphi中用TIdHTTP控件 ,在Indy Clients页面。
示例:
Memo1.Lines.Text := IdHTTP.Get(URL);
或
showmessage(IdHTTP1.Get(http://www.3322.org/dyndns/getip));
所以我们的代码是:
procedure TForm1.IP2Click(Sender: TObject);
var
Wnd:HWND;
begin
Wnd:=application.Handle;
messagebox(Wnd,PChar(IdHTTP1.Get(http://www.3322.org/dyndns/getip)),PChar(InSun),MB_OK);
end;
其实我们用的就是第三方网页获取公网Ip的。
我们聪明的用了最简单的网页,而下面的网页是查询式的,势必用到字符串操作,有些复杂,大家可以研究下。
http://hi.baidu.com/blackcode/blog/item/ab9beacd400897520fb34581.html
“刚才baidu了下,关于这个的,问的人倒是挺多,方法好像不是太多,1,找一个外网的机子配合,
得到本机的公网ip,2,通过三方网页获取,我就是用的2,其实很简单,get html代码,通过几个
字符串操作函数分析,得到所需信息。废话说完了,直接看代码。”
function pro_result(str:string):string ;//封装了成一个匹配的处理函数
var
i_0,i_1:Integer;
flag:Boolean;
str_1,temp_result:string;
begin
temp_result:=;
while Pos(查询结果,str)<>0 do
begin
i_1:=Pos(</span>,str);
i_0:=Pos(查询结果,str);
temp_result:=temp_result+Copy(str,i_0,i_1-i_0)+#13#10;
Delete(str,1,Pos(</span>,str));
end;
ReplaceString(temp_result, ,,flag);
Result:=temp_result;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
temp,str_1:string;
i:Integer;
begin
Memo1.Text:=IdHTTP1.Get(http://www.ipseeker.cn);
temp:=Memo1.Text;
i:=Pos(查询结果,temp);
str_1:=Copy(temp,i,254);
str_2:=pro_result(str_1);
Memo2.Text:=str_2;
end;
当然ReplaceString函数要有定义。
我们把它们写在一起,我就不用皮肤了,也不写标题了,大家自己发挥。
如图:
联系客服