Delphi 套接字错误#10054对等方重置连接

Delphi 套接字错误#10054对等方重置连接,delphi,ssl,Delphi,Ssl,我使用delphi xe6、windows10、openssl 1.0.2u win32,当我连接到许多www时,我没有问题,但当我尝试连接时,我总是出现错误“套接字错误#10054连接由对等方重置”。我尝试用多种组合更改SSLOptions.sslversion。。。但我有任何错误。。。我在搜索类似的错误,但我没有找到解决方案。。。你有什么想法吗 谢谢 代码如下: hIOHand.SSLOptions.SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTL

我使用delphi xe6、windows10、openssl 1.0.2u win32,当我连接到许多www时,我没有问题,但当我尝试连接时,我总是出现错误“套接字错误#10054连接由对等方重置”。我尝试用多种组合更改SSLOptions.sslversion。。。但我有任何错误。。。我在搜索类似的错误,但我没有找到解决方案。。。你有什么想法吗

谢谢

代码如下:

  hIOHand.SSLOptions.SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2,sslvSSLv23];
  hIOHand.SSLOptions.SSLVersions := [sslvTLSv1]; //i will try with all combinations
  Web.IOHandler := hIOHand;

  Web.OnHeadersAvailable := CheckResponseCharset;
  Web.Request.UserAgent := INET_USERAGENT;       //Custom user agent string
  Web.RedirectMaximum := INET_REDIRECT_MAX;      //Maximum redirects
  Web.HandleRedirects := INET_REDIRECT_MAX <> 0; //Handle redirects
  Web.ReadTimeOut := INET_TIMEOUT_SECS * 1000;   //Read timeout msec
  Web.ConnectTimeout := INET_TIMEOUT_SECS div 2 * 1000;

  try
    Sito := Web.Get(FUrl);
    Sito := DateToStr(Web.Response.LastModified) + Sito;
  except
    on e : exception do
      Sito := '!!|!!|ERR-: ' +FUrl+#32+e.Message;
 end
finally
  EndTime := Now;
  TStr.Free;
  Web.Free;
  hIOHand.Free;
end;
hIOHand.SSLOptions.SSLVersions:=[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2,sslvSSLv23];
hIOHand.SSLOptions.SSLVersions:=[sslvTLSv1]//我会尝试所有的组合
Web.IOHandler:=hIOHand;
Web.OnHeadersAvailable:=CheckResponseCharset;
Web.Request.UserAgent:=INET\u UserAgent//自定义用户代理字符串
Web.RedirectMaximum:=INET\u REDIRECT\u MAX//最大重定向
Web.HandleRedirects:=INET\u REDIRECT\u MAX 0//句柄重定向
Web.ReadTimeOut:=INET\u TIMEOUT\u SECS*1000//读取超时毫秒
Web.ConnectTimeout:=INET\u TIMEOUT\u SECS div 2*1000;
尝试
Sito:=Web.Get(FUrl);
Sito:=DateToStr(Web.Response.LastModified)+Sito;
除了
关于e:exception-do
Sito:='!!||错误-:“+FUrl+#32+e.Message;
结束
最后
结束时间:=现在;
TStr免费;
免费上网;
hIOHand.Free;
结束;

第二个“hIOHand.SSLOptions.SSLVersions”仅用于测试仪错误10054表示服务器已关闭连接。为什么?因为服务器根据其规则检测到一些不正常的内容。这可能是您尝试的SSL版本,但也可能是密码,甚至是您自己的IP地址(在这种情况下,它也不应该在浏览器中工作)。您还应该尝试使用最新的OpenSSL库(不知道如何使用Indy:我使用ICS)。。。我验证了OpenSSL库是最新版本。当我尝试使用浏览器访问网站时,我有一个正常的响应。但是对于我的程序,我有这个问题。@ondertol“我已经验证过了,OpenSSL库是最新的版本”-你能更具体一点吗?你到底试了哪个版本?Indy尚未“正式”支持OpenSSL 1.1.x,仅支持1.0.2及更早版本。而
u
是1.0.2系列中的最后一个。OpenSSL 1.1.x还有一个尚未主控的版本。@ondertol“当我尝试使用浏览器访问网站时,我有一个正常的响应。但我的程序有这个问题”-然后我建议您使用数据包嗅探器,如Wireshark,查看问题是否发生在TLS握手过程中。如果是,请检查浏览器握手和应用程序握手之间是否存在任何差异。如果问题发生在握手之后,则比较实际HTTP请求的差异。要捕获原始HTTP数据,您可以启用浏览器的内置调试器,并将
TIdLog…
组件附加到
TIdHTTP.Intercept