我有一个移动客户端,该客户端将通过TCP连接到服务器。我想设置经纪人安排,客户端连接到端口12345上的服务器;服务器对客户端进行身份验证,并将客户端发送到处理用户需求的服务器,并告诉客户端重新连接到接收到的套接字。因此,我现在希望客户连接到1.2.3.4:12345,而是希望客户连接到1.2.3.4:23456。
有没有办法在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/端口,然后客户端需要制作新的TCP套接字并将其连接到该IP/port