【发布时间】:2019-12-13 13:44:51
【问题描述】:
检查 HTTPS 站点后,我没有收到任何错误,并且可以返回 Internet 连接似乎正常工作,但是当我关闭程序时,我得到了一个 AV。
这是我之前关于检查 Internet 连接是否正常的帖子的后续内容。
我按照建议修改了我的函数,现在检查了几个站点,但是,如果我访问 HTTPS 站点,我的函数可以工作,但是当我关闭程序时,我得到了一个 AV。如果我只访问 HTTP 站点进行测试,则关闭时不会发生 AV。
这是函数的一个片段,我访问的第一个站点是 HTTPS,所以我不需要处理程序,这样更简单。如果我注释掉 HTTPS 并取消注释 HTTP,它可以工作,没有 AV。实际功能测试了几个站点,但这很容易产生错误。
访问 HTTPS 站点时我需要做一些额外的事情吗?
procedure TForm1.btnTestConnectionClick(Sender: TObject);
var
http: TIdHttp;
bFound: boolean;
begin
bFound := True;
http := TIdHttp.Create(nil);
try
try
//http.Get('http://www.google.com');
http.Get('https://www.wikipedia.org');
except
bFound := False;
end;
finally
FreeAndNil(http);
end;
if not bFound then
ShowMessage('Internet not working')
else
ShowMessage('Internet working');
end;
返回值符合预期,如果我尝试多个站点直到找到一个(表明 Internet 正在运行),它可以工作,但是如果我访问 HTTPS 站点,我会在程序关闭时获得 AV。
【问题讨论】:
-
您的代码很好,AV 可能与其他内容有关。您需要调试代码并找出根本原因。但是,也就是说,您根本不需要处理 HTTPS 来测试有效连接。实际上,您甚至根本不需要使用 TIdHTTP,仅使用 TIdTCPClient 就足够了。您所需要的只是连接到几台服务器上的给定端口,您不需要实际与它们通信。我在之前的回答中已经告诉过你了
-
如果您的真正目标是连接到其他网站,那么检查您是否可以连接到 google.com 有什么意义?既然你需要处理你真正的通信代码中的错误,为什么还要浪费时间检查你是否可以连接到其他站点呢?