我有一个移动客户端,它将通过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;
这成功地将对等端口更改为所需的端口,但没有告诉客户端重新连接。因此仍然使用端口映射。
答案 0 :(得分:1)
没有办法在TCP层上执行所需的操作。建立连接后,将无法更改其端点。要执行您想要的操作,服务器需要向客户端发送一条消息,告诉它新的IP /端口,然后客户端需要创建一个新的TCP套接字并将其连接到该IP /端口