Delphi Indy IdTCPClient ReuseSocket 收到“套接字错误 # 10048 - 地址已在使用中”

问题描述 投票:0回答:1

我有这个简单的代码:

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
的不同组合,但结果没有改变

delphi tcpclient indy10
1个回答
0
投票

尽管使用

ReuseSocket=true
,但您根本无法拥有具有完全相同的协议 (IPv4/v6)、源 IP/端口 (
BoundIP
/
BoundPort
) 和目标 IP/端口 (
Host) 的多个 TCP 连接
/
Port
)。如果它们这样做,操作系统将无法区分它们。这就是为什么第二个
Connect()
失败了。

© www.soinside.com 2019 - 2024. All rights reserved.