Можно ли обратиться к сокету сервер / клиент в другой сети? (C ++) - PullRequest
0 голосов
/ 28 апреля 2019

Я кодировал сервер / клиентское приложение, которое запускал сначала локально, а затем через Интернет.Поэтому я настроил мой маршрутизатор так, чтобы он принимал данные через порт xxxx и пересылал его на мою машину, где работает мой сервер и где он принимает соединения от клиентских сокетов.Так что все работает нормально, и клиенты могут отправлять туда сообщения друг другу.Итак, теперь мой вопрос, как это возможно, что сервер может отправлять данные клиентам в других сетях, где переадресация портов не активирована, но когда я пробую это вручную, это не работает.

Я уже пробовалВ поисках того, как TCP сохраняет IP и порты, я также посмотрел, как работает концепция Internet / TCP / UDP, но не смог найти ответ на этот вопрос.

Итак, прежде всего я хотел бы знать, что прежде, чем я реализую свой сервер без переадресации портов, было бы также признательно, если бы вы могли привести примеры кода для c ++ на окнах, если у вас есть какие-либо идеи, чтобы я мог установить такиесоединения без переадресации портов и внешних серверных хостов в интернете.

1 Ответ

0 голосов
/ 28 апреля 2019
Clint -> NAT (router) -> ... -> NAT (router) -> server

Когда клиент отправляет сообщение (это может быть попытка подключения в случае TCP или просто сообщение, если это UDP), его NAT не блокирует его и запоминает, какой локальный адрес: порт, с которого он приходитпо какому адресу: порт будет: [client address:port, server address:port].Когда сообщение достигает NAT сервера, NAT знает о вашем сервере, потому что вы настроили «переадресацию портов», и передает сообщение в локальную сеть.Теперь, когда сервер отправляет сообщение обратно клиенту и достигает клиентского NAT, NAT проверяет свою внутреннюю таблицу, находит запись для этой конкретной server address:port, извлекает часть client address:port и передает ей сообщение.Так что все работает, как и ожидалось.

Именно поэтому обычно, когда вы открываете браузер и переходите по какой-либо веб-ссылке, вы получаете ответ сервера с веб-страницей без проблем, несмотря на то, что вы находитесь за NAT.

Этоупрощенное объяснение, в котором пропущен локальный / глобальный адрес: сведения о порте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...