Delphi中通过TClientSocket获取公网(WAN)IP地址


本文整理自网络,侵删。

 调用代码示例: 
var
ip: string;
begin
with TStringlist.Create do
try
Text := GetHTML('http://www.3464.com/Data/IP/ip.asp') ;
if Count > 0 then ip := Strings[Count - 1];
finally
Free;
end;
ShowMessage('Your (gateway / router / proxy) IP address is ' + ip) ;
end;
GetHTML函数代码:
uses ScktComp;
function GetHTML(const AURL: string): string;
var
sHead,sHost,sPage: string;
x,xCnt,xCntTotal: integer;
sock: TClientSocket;
ws: TWinSocketStream;
ss: TStringStream;
buff: array[0..4095] of char;
const
CrLf = #13#10;
begin
Result := '';
sHost := AURL;
x := Pos('//',sHost) ;
if x > 0 then
System.Delete(sHost,1,x+1) ;
x := Pos('/',sHost) ;
if x > 0 then
begin
sPage := Copy(sHost,x,Length(sHost)) ;
System.Delete(sHost,x,Length(sHost)) ;
end
else
begin
sPage := '/';
end;
sock := TClientSocket.Create(nil) ;
try
try
sock.ClientType := ctBlocking;
sock.Port := 80;
sock.Host := sHost;
sock.Open;
// set timeout to 20 seconds
ws := TWinSocketStream.Create(sock.Socket,20000) ;
ss := TStringStream.Create('') ;
try
sHead := 'GET ' + sPage + ' HTTP/1.0 ' + CrLf + 'Host: ' + sHost + CrLf + CrLf;
StrPCopy(buff,sHead) ;
ws.Write(buff,Length(sHead) + 1) ;
ws.Position := 0;
FillChar(buff,SizeOf(buff),0) ;
repeat
xCnt := ws.Read(buff,SizeOf(buff)) ;
xCntTotal := xCntTotal + xCnt;
ss.Write(buff[0],xCnt) ;
until xCnt = 0;
Result := ss.DataString;
finally
ws.Free;
ss.Free;
end;
except
end;
finally
sock.Free;
end;
end;

相关阅读 >>

Delphi 创建大窗口

Delphi中将webbrowser用作网页编辑器

Delphi常用数据类型

Delphi 提升进程令牌

Delphi xe6 使用intent启动活动并在android应用程序中获取返回值的示例

Delphi 获取unixtime

Delphi twebbrowser:确定带有框架的页面何时完成

Delphi 调用系统右键菜单

Delphi 基础学习 字符串去掉回车符

android实例-拍摄和分享照片、分享文本(xe8+小米2)

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...