我用的是SOCKET+ADO+SQL,在客户端用TSimpleObjectBroker来配置应用服务器的地址列表(多个地址)。
    客户需要自己指定中间层IP地址,如果配置的中间层地址是正确的,在连接时是正常的,但配置的地址不正确(包括不存在该地址和该地址上没有安装中间层),那么连接时程序无法响应,要等待3、4分钟后才触发异常。代码如下:
  with main_sktcnt do begin
    Connected:=false;
    try
      connected:=true;
      messagebox(handle,'可以正确连接。','系统信息',MB_OK);
    except
      messagebox(handle,'不能正确连接。','出错信息',MB_OK);
    end;
  end;请问如何解决?急……

解决方案 »

  1.   

    SOCKET+BDE+SQL中,我也遇到同样的问题。
      

  2.   

    是不是夸张了一点,我看也用着等待3、4分钟后才触发异常,我的想法是加一个Timer1,强制触发异常程序(自己没实现过)
      

  3.   

    我也碰到这个问题,不过只有SocketConnection才会这样:http://expert.csdn.net/Expert/topic/2888/2888279.xml?temp=.8070642
      

  4.   

    是不是夸张了一点,我看也用着等待3、4分钟后才触发异常,我的想法是加一个Timer1,强制触发异常程序(自己没实现过)
    ------------------------------------------------------
    系统在忙的时候,Timer1根本没法触发,线程应该还差不多!
      

  5.   

    我现在的解决方法是先判断网络有没有通,如果不通就不连接:function Tfrmmain.TestHost(AHost :string) : boolean;
    var
     WSAData:TWSADATA;
    begin
      WSAStartup(2, WSAData);
      if GetHostByName(PChar(AHost))=nil then
       result:= false
       else result:= true;
      WSACleanup();
    end;...
      for I := 0 to ServerConns.Count -1 do
      begin
       if TestHost(ServerConns.Items[I].FServerN) then
        with TServerItem(SmpBroker.Servers.Add) do
        begin
          ComputerName := ServerConns.Items[I].FServerN;
          Port := ServerConns.Items[I].FPortID;
        end;
      end;
      
      if SmpBroker.Servers.Count <= 0 then
      begin
        MsgBox('没有可用的中间层服务器!');
        Exit;
      end;
      RmConn.Connected := true;
      if not RmConn.Connected then
        Exit;
      

  6.   

    可以试试用TIdTCPServer/TIdTCPClient测试地址的211端口有没有通。我没实现过。