2017-01-18 16 views
0

хорошо я пытаюсь понять этот подход, позволяет сказать, что я бежал 2 сервераTidtcpserver прослушивает многопортовые устройства?

Сервер находится на Ip 1.1.1.1 и порт 36663 Сервер B находится на IP 2.2.2.2 и порт 54223

я прошу уметь понять этот подход

Могу ли я сделать клиентов на сервере Уметь общаться с клиентами на сервере Б? как пример клиент подключается к серверу A и хочет отправить некоторые данные клиенту, который подключается к серверу B, это можно сделать с помощью сервера indy tcp?

Если ответ да, то пример будет полезен для полного понимания этого подхода.

У меня есть 2 сервера на другой машине

1 машина имеет несколько медленных сетевых проблем, а другие имеют хорошую сеть.

логика здесь, когда клиент SERVERA который занимает более 20 секунд для подключения, в течение этого 20 секунд попытайтесь подключиться к другой IP-адрес сервера и иметь возможность общаться с клиентом, которые уже coonnected на SERVERA

ответ

1

TIdTCPServer имеет свойство Bindings, которое представляет собой набор пар IP/портов, который слушает сервер. У вас может быть один объект TIdTCPServer, прослушивающий несколько пар IP/Port, или вы можете использовать несколько объектов TIdTCPServer, прослушивающих разные пары, на той же машине.

В любом случае подключенные клиенты хранятся в собственности TIdTCPServer.Contexts.

Когда клиент хочет послать данные другого клиента, независимо от того, IP-сервера/порт он подключен к, все, что вам нужно сделать, это перебирать Contexts список соответствующего TIdTCPServer объекта до тех пор, пока не найдешь TIdContext объекта целевого клиента, а затем у вас будет доступ к свойству Connection.IOHandler.


С другой стороны, если у вас есть отдельные TIdTCPServer объектов, работающих на разных машинах , клиенты не могут напрямую общаться с клиентами на другом сервере. Вам нужно будет установить соединение между двумя серверами, а затем вы можете проксировать любые данные клиент-клиент через это соединение по мере необходимости.

+0

поэтому я добавляю только многоуровневый ip и порт для привязки, этот подход необходим для обработки некоторых сбоев подключения, например, если сервер A занимает много времени, а затем подключается к серверу B и все еще может связываться с сервером A –

+0

Открытие порты не влияют на время, необходимое для подключения к ним. Если вы открываете два порта * на одном сервере *, клиент может подключиться к любому порту, и он должен принимать одинаковое количество времени в любом случае. Теперь, если у вас есть * две серверные машины *, и вы хотите, чтобы они разговаривали друг с другом, это совершенно другая проблема. Предлагаю вам изменить свой вопрос, чтобы уточнить вашу реальную ситуацию. –

+0

Нет, я имею в виду на разных машинных серверах. –

 Смежные вопросы

  • Нет связанных вопросов^_^