
Я задавался вопросом, есливозможносоединить двавходящий tcpрозетки.
Например:
Client A -----> Server <----- Client B
Сервер отправляет свою магию обоим клиентам, а затем они подключаются друг к другу, минуя сервер.
Server
Client A ----------><---------- Client B
ОБНОВЛЯТЬ:
Идея заключается в том, что даже если эти клиенты не могут привязываться к портам для прослушивания, они все равно могут создавать соединения друг с другом с помощью сервера.
Например, у Клиента A и Клиента B есть TCP-сокеты с сервером. Пользователь A решает пообщаться с Пользователем B и создает новое TCP-соединение с сервером с запросом на его соединение с Пользователем B. Сервер отправляет этот запрос Клиенту B, и он также открывает новое TCP-соединение с сервером для этой линии чата.
Теперь, когда сервер имеет оба чат-подключения от A и B, он соединяет их, и они могут работать без сервера, и в результате серверу не придется обрабатывать все сообщения и файлы, которыми обмениваются два пользователя. Вот в чем идея.
решение1
Неясно, находятся ли оба клиента в одной сети. Я предполагаю, что нет, иначе этот вопрос не возник бы.
Из вышеприведенного предположения следует, что один клиент не может напрямую адресовать пакет TCP/IP другому клиенту, поэтому для этого абсолютно необходим мост. Поэтому в общем случае ответ заключается в том, что это невозможно — мост всегда будет необходим в качестве посредника.
Однако, если оба клиента подключены к Интернету через маршрутизатор, они могут использовать Интернет в качестве моста, например, с помощьюpwnatпрограммное обеспечение. Для получения более подробной информации см.этот ответмой.