2014-11-05 2 views
0

В настоящее время я работаю над программой обмена сообщениями в Java, и я планировал использовать UDP для отправки сообщений от пользователя на центральный сервер, и я планировал использовать, возможно, TCP для сообщений с сервера, возвращающихся к пользователю. Мой главный вопрос: как я могу достичь этого, не требуя, чтобы клиент переместился?Почему программы, подобные Skype, не требуют от вас открытия портов?

ответ

1

Очень просто, клиент должен установить TCP-соединение с сервером, даже если первичный (действительно, если не только) поток данных находится в противоположном направлении.

+0

Я не понимал, что движение может идти в обратном направлении! Я думал, что TCP требуется как для создания соединения, так и из-за характера TCP (трехстороннее рукопожатие). Спасибо, что поняли это для меня! – Kristoff

+0

Любые брандмауэры/NAT в пути позволят завершить трехстороннее квитирование (при условии, что исходящий трафик разрешен), в противном случае TCP-соединение никогда не будет работать. – Alnitak

1

Такие программы, как skype, используют общий открытый порт (порт 80) или помещают в брандмауэр правило, позволяющее другому порту взаимодействовать. Кроме того, программа может открывать порты выше 1024 без административных разрешений, хотя в зависимости от типа подключения может потребоваться настройка UPnP или сохранение активного канала на сервере. Windows Firewall

+0

И как именно несколько программ могут совместно использовать один и тот же порт, но когда я случайно покидаю экземпляр моего сервера, я получаю исключение из-за того, что порт уже используется? – Kristoff

+0

Когда программа открывает порт, он может установить, что порт является неэксклюзивным, если он хочет поделиться этим портом. Значение по умолчанию обычно является исключительным, поэтому вы получите эту ошибку. – MiltoxBeyond

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