Возможно ли установить прямое соединение между двумя клиентами, которые находятся за разными NAT? Конечно, я понимаю, что в какой-то степени необходим сервер с публичным IP-адресом, но я не хочу, чтобы он был прокси-сервером. Взгляните на следующий сценарий:Как создать соединение P2P, когда оба клиента находятся за NAT
- Я не хочу, чтобы какое-либо отношение к настройке сетевых устройств. Я просто хочу сделать это в коде.
- Я не хочу, чтобы сервер принять участие в процессе передачи файлов (по соображениям производительности)
- мы имеем: клиент А, клиент B, и сервер S, и это выглядит примерно так:
а - [Роутер1] - S - [Роутер2] - Б
- соединяется с S и разрешает
- B соединяется с S и разрешает
- А хочет послать файл B
- просит S для подключения к B
- S [делает это волшебство здесь] и А теперь есть подключение к B
- А начинает посылать файл
- S идет вниз (или по крайней мере передачи файлов в обход есть)
- есть еще связь между A и B
- продолжает передавать файл B
Мои вопросы:
- Возможно ли это?
- Как это сделать?
- Встретились с примером проекта, который может это сделать?
Я нашел WCF/WPF Chat Application, но оказалось, что это прокси.
Я также нашел несколько сообщений, предлагающих использовать UPnP и NAT Traversal, но никто не ответил на мой первый вопрос, поэтому я не глубоко вникнул в него.