TCPClient连接到ip列表

时间:2014-01-16 12:50:00

标签: delphi delphi-7 indy indy10

我是专门在indy中编写客户端/服务器的新手,我正在尝试使用我的TCPClient在这里,如果主服务器IP处于脱机状态,它将尝试连接到其他IP,任何想法如何做到这一点?我猜它会像......

  IdTCPClient1.ReuseSocket := rsTrue;
  IdTCPClient1.BoundIP :=   '192.168.1.31'; //other ip here
  IdTCPClient1.BoundPort := 5000;
  IdTCPClient1.Host := 'localhost';//main ip server here
  IdTCPClient1.Port := 5000;

  IdTCPClient1.Connect;

但是我得到一个错误:“Count not bind socket。”或“地址已被使用”。

1 个答案:

答案 0 :(得分:1)

阅读有关BoundIP的http://www.delphigroups.info/2/7/199566.html

您无法将TCPClient转换为ips的滚动列表。如果可以 - 会有一个类似于数组的属性,你可以放置10或100个地址,而不是只有两个。

你真正需要做的是 - 实际上是尝试连接到不同的地址

示例:

function TryToConnect(const server: string): boolean; overload;
begin
  try
    IdTCPClient1.ReuseSocket := rsTrue;
    IdTCPClient1.Host := server;
    IdTCPClient1.Port := 5000;

    IdTCPClient1.Connect;
    Result := true;
  except on E: Exception do begin
    Result := false;
    LogToFileAndScreenAnError(E.ClassName + ' ==> ' + E.Message);
  end;
end;

function TryToConnect(const servers: array of string): boolean; overload;
var i: integer;
begin
  Result := false;
  for i := Low(servers) to High(Servers) do begin
      Result := TryToConnect( servers[i] );
      if Result then break;
  end;


  if not Result then LogAndShowError('Could not connect to any of servers! Read log file!');

 { or maybe even

  if not Result then raise Exception.Create('Could not connect to any of servers! Read log file!');

 }
end;


var ss: TStringDynArray;

SetLength(SS, 2);
ss[0] := 'localhost';
ss[1] := '192.168.3.10';

Success := TryToConnect(ss);