将客户端重新连接到不同的套接字

Reconnect client to different socket

我有一个将通过 TCP 连接到服务器的移动客户端。我想建立一个代理安排,客户端连接到端口 12345 上的服务器;服务器对客户端进行身份验证,并向客户端发送套接字到处理该用户需求的服务器,并告诉客户端重新连接到接收到的套接字。因此,我现在希望客户端连接到 1.2.3.4:23456,而不是让客户端保持连接到 1.2.3.4:12345。

有没有办法在 TCP 协议中做到这一点?或者我是否需要在连接的两端进行自定义编程?

使用 TIdMappedPortTCP,我试过这个:

procedure TForm3.idMapPortBeforeConnect(AContext: TIdContext);
begin
  if Pos(AContext.Binding.PeerIP,'192.168.0.21') > 0 then
    AContext.Binding.SetPeer('192.168.0.89',12345);
end;

这成功地将对等端口更改为所需端口,但不会告诉客户端重新连接。所以还是用端口映射。

TCP层无法为所欲为。一旦建立连接,就不能更改其端点。为了做你想做的事,服务器需要向客户端发送一条消息,告诉它新的 IP/port,然后客户端需要创建一个新的 TCP 套接字并将其连接到那个 IP/port