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 创建并调用 dll

Delphi tmemo 可以显示、编辑多行文本

Delphi10及以上版本安装activex控件

Delphi中动态加载treeview信息

Delphi xe 打开andorid gps设置

Delphi中的处理事件 application.processmessages

Delphi获得唯一id字符串

Delphi 如何把字符串覆给数组

Delphi 10.3版本获取windows系统版本和cpu信息

Delphi��image存入读取mysql数据库

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



打赏

取消

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

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

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

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

评论

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