我是专门在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。”或“地址已被使用”。
答案 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);