我有这个简单的代码:
var
IdTCPClient1: TIdTCPClient;
IdTCPClient2: TIdTCPClient;
begin
IdTCPClient1 := TIdTCPClient.Create;
IdTCPClient2 := TIdTCPClient.Create;
IdTCPClient1.UseNagle := False;
IdTCPClient2.UseNagle := False;
IdTCPClient1.ReuseSocket := rsTrue;
IdTCPClient2.ReuseSocket := rsTrue;
IdTCPClient1.Host := '127.0.0.1'; // server ip
IdTCPClient2.Host := '127.0.0.1'; // server ip
IdTCPClient1.Port := 42000; // server port
IdTCPClient2.Port := 42000; // server port
IdTCPClient1.BoundIP := '127.0.0.1';
IdTCPClient2.BoundIP := '127.0.0.1';
IdTCPClient1.BoundPort := 43000;
IdTCPClient2.BoundPort := 43000;
IdTCPClient1.Connect; // connected
IdTCPClient2.Connect; // get error
但是我收到“地址已在使用中”错误,这是怎么回事?
我也尝试过与
UseNagle = True
的不同组合,但结果没有改变
尽管使用
ReuseSocket=true
,但您根本无法拥有具有完全相同的协议 (IPv4/v6)、源 IP/端口 (BoundIP
/BoundPort
) 和目标 IP/端口 (Host
) 的多个 TCP 连接
/Port
)。如果它们这样做,操作系统将无法区分它们。这就是为什么第二个Connect()
失败了。