Delphi InternetSetOption中的连接超时不起作用
理论上,连接尝试应在5秒后终止。然而在实践中,我仍然得到无限的超时。有没有办法从外部终止连接。例如,我可以使用定时器,然后执行适当的函数中止。另一个令人讨厌的解决方法是使用TerminateThread函数触发线程并杀死它Delphi InternetSetOption中的连接超时不起作用,delphi,Delphi,理论上,连接尝试应在5秒后终止。然而在实践中,我仍然得到无限的超时。有没有办法从外部终止连接。例如,我可以使用定时器,然后执行适当的函数中止。另一个令人讨厌的解决方法是使用TerminateThread函数触发线程并杀死它 function DownloadFile(URL, {User, Pass,} FileName: string): Boolean; const BufferSize = 1024; var hSession, hURL: HInternet; Buffer: a
function DownloadFile(URL, {User, Pass,} FileName: string): Boolean;
const
BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen,Connect_timeout: DWORD;
F: File;
User,Pass:string;
begin
User:='';
Pass:='';
Result := False;
hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0) ;
Connect_timeout := 5000 ;
InternetSetOption(hSession, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@Connect_timeout), sizeof(Connect_timeout));
// Establish the secure connection
InternetConnect (
hSession,
PChar(URL),
INTERNET_DEFAULT_HTTPS_PORT,
PChar(User),
PChar(Pass),
INTERNET_SERVICE_HTTP,
0,
0
);
try
hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0) ;
try
AssignFile(f, FileName);
Rewrite(f,1);
try
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen) ;
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
finally
CloseFile(f) ;
Result := True;
end;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end;
end;
您没有提到操作需要很长时间才能超时,但我猜是在InternetReadFile,因为您没有设置INTERNET\u选项\u接收\u超时选项。但是,请关注,例如,查看MS在超时的情况下仍存在一些问题,无法找到英文链接的知识库文章,因此,这里是。好的。谢谢你的回答。我注意到另一个带有超时值的奇怪行为。不管我输入什么,超时总是需要12秒。可能重复的是,它不起作用。使用线程或Indy实现它。