我使用了Indy10的TIdHttp + TIdSSLIOHandlerSocketOpenSSL来实现SSL的数据传输。可是,有时候TIdHttp对象的Post()方法不会返回。线程就阻塞在那边。即使设置了超时也没有用处。有时候又一切正常。这个问题找了好久,都没发现问题所在。高手帮帮忙吧。谢谢。
//SSL的创建
FSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
FSSL.SSLOptions.Method := sslvSSLv23;
FSSL.ReadTimeout := 2000;
FSSL.ConnectTimeout := 2000;
FSSL.SSLOptions.Mode := sslmClient;
FHTTP := TIdHTTP.Create(nil);
FHTTP.ReadTimeout := 2000;
FHTTP.ConnectTimeout := 2000;
FHTTP.IOHandler := FSSL;
FHTTP.OnWorkBegin := OnMyWorkBegin;
FHTTP.OnWork := OnMyWork;
FHTTP.OnWorkEnd := OnMyWorkEnd;
procedure DownloadFile;
var
vStream: TFileStream;
begin
try
vStream := TFileStream.Create(Path, fmCreate);
{问题:便发生在以下的Post()方法中!有时能正常返回,有时无法返回。线程呈现阻塞状态。是不是因为服务器没响应啊,但是
我有设置超时啊!该怎么办呢?}
FHTTP.Post('https://10.11.12.48/weborb/Services/etim/rpc/fileDown.php', FParaList, vStream);
finally
vStream.Free;
end;//try
end;
//SSL的创建
FSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
FSSL.SSLOptions.Method := sslvSSLv23;
FSSL.ReadTimeout := 2000;
FSSL.ConnectTimeout := 2000;
FSSL.SSLOptions.Mode := sslmClient;
FHTTP := TIdHTTP.Create(nil);
FHTTP.ReadTimeout := 2000;
FHTTP.ConnectTimeout := 2000;
FHTTP.IOHandler := FSSL;
FHTTP.OnWorkBegin := OnMyWorkBegin;
FHTTP.OnWork := OnMyWork;
FHTTP.OnWorkEnd := OnMyWorkEnd;
procedure DownloadFile;
var
vStream: TFileStream;
begin
try
vStream := TFileStream.Create(Path, fmCreate);
{问题:便发生在以下的Post()方法中!有时能正常返回,有时无法返回。线程呈现阻塞状态。是不是因为服务器没响应啊,但是
我有设置超时啊!该怎么办呢?}
FHTTP.Post('https://10.11.12.48/weborb/Services/etim/rpc/fileDown.php', FParaList, vStream);
finally
vStream.Free;
end;//try
end;
http://www.piaoyi.org/computer/Delphi-INDY-IDFTP-IDHTTP-connecttimeout.html
彻底解决。