【问题标题】:Reconnect client to different socket将客户端重新连接到不同的套接字
【发布时间】:2019-09-30 21:39:40
【问题描述】:

我有一个通过 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;

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

【问题讨论】:

    标签: sockets delphi tcp indy broker


    【解决方案1】:

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

    【讨论】:

    • 谢谢 Remy 我就是这么想的,只是想确认一下。
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2015-02-08
    相关资源
    最近更新 更多