У меня есть мобильный клиент, который подключится через 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;
Это успешно меняет одноранговый порт на нужный порт, но не говорит клиенту о необходимости повторного подключения. Таким образом, сопоставление портов все еще используется.