Программа клиент-сервер за маршрутизатором

Я пытаюсь запустить клиент-серверную программу UDP. Обе мои машины находятся в разных сетях. Я настроил переадресацию портов в своем роутере.

Мой сервер имеет два IP-адреса: 1) Внешний 200.?.?.? 2) Внутренний 192.168.0.100

При создании UDP-сервера мне нужно создать сокет, привязанный к адресам.

К какому адресу я должен привязать сокет, внешний или внутренний?

Я пробовал с внутренним адресом, но он не получает никаких данных от клиента.

Предложения...


person anand    schedule 03.12.2008    source источник


Ответы (2)


Учитывая тот факт, что вы сказали, что настроили переадресацию портов, назначили ли вы правильные порты в программе UPD? или вы просто отправляете данные на IP-адрес? Если вы укажете внешний IP-адрес и номер порта, переадресация портов на вашем маршрутизаторе должна отправить его на соответствующий узел в сети.

person John T    schedule 03.12.2008
comment
да, я установил порт 15500 как на клиенте, так и на сервере, и тот же номер порта при переадресации портов... На сервере я создаю адрес получателя как recvAddr.sin_addr.s_addr = htonl(INADDR_ANY); я должен дать INADDR_ANY или внешний IP? - person anand; 03.12.2008

Если вы должны привязаться к определенному адресу, то это будет внутренний адрес, а не внешний адрес.

Весь смысл NAT на вашем маршрутизаторе заключается в том, чтобы скрыть вашу внутреннюю сетевую схему адресации от внешнего мира. Алгоритм NAT маршрутизатора позаботится о перезаписи IP-адреса назначения в любом входящем пакете на правильный внутренний IP-адрес.

То, что он не работает, предполагает, что что-то не так с переадресацией портов и/или брандмауэром на маршрутизаторе. Нередко вам потребуется настроить определенное правило брандмауэра для разрешения трафика в дополнение к правилу переадресации.

person Alnitak    schedule 06.12.2008