IdTCPClient无法通过弱互联网连接进行连接

时间:2014-03-22 17:41:06

标签: delphi indy indy10

我有一个简单的过程,它使用TIdTCPClient连接到服务器。其目的是尝试到达服务器并阻止线程,直到建立连接。它适用于稳定的互联网连接。问题是,当这个客户端在某些计算机上执行时(所有这些计算机都有缓慢或不稳定的互联网连接,如移动3G或只是在遥远的小城镇),它总是无法连接"连接超时"例外。与此同时,上述计算机运行浏览器,IM客户端等,这些应用程序运行正常。我的服务器应用程序也没有显示新客户端的迹象。

以下是程序:

procedure ConnectToServer;
begin
  EnterCriticalSection(CS_Connect);
  try
    while not Client.Connected do
    begin
      Log('Connection attempt...');
      Client.Port := <port goes here>;
      Client.IPVersion := Id_IPv4;
      Client.Host := '<ip address here>';
      Client.ConnectTimeout := 11500;

      try
        Client.Connect;
      except
        on E: Exception do
          Log('Exception: ' + E.ToString);
      end;

      if Client.Connected then
      begin
        Log('Connected after ' + inttostr(attempts) + ' failed attempts');
        Client.IOHandler.WriteLn(MSG_HELLO);
        attempts := 0;
        exit;
      end;
      Inc(attempts);
      Log('Connection attempt failed');
      Sleep( min(attempts * 1000, 50000) );
    end;
  finally
    LeaveCriticalSection(CS_Connect);
  end;
end;

1 个答案:

答案 0 :(得分:1)

你没有做错任何事(尽管你使用Connected是多余的)。 Indy使用与其他应用程序使用相同的套接字API。它们都使用相同的底层connect()函数。所以问题不在于Indy,而在于操作系统本身。由于您的信号较弱,因此当任何给定的连接成功或失败时,它会被击中/未命中。