Итак, хотя другие ответы охватывают часть проблемы (библиотеки сокетов), они не говорят вам о проблеме NAT. Вместо того, чтобы ваши пользователи возились со своими маршрутизаторами, лучше использовать некоторые методы, которые помогут вам пройти через смутный маршрутизатор без дополнительной настройки. Вы должны использовать все это для лучшей совместимости.
Во-первых, библиотека ICE здесь - это метод обхода NAT, который работает с серверами STUN и / или TURN в сети. Возможно, вам придется предоставить некоторую инфраструктуру, чтобы это работало, хотя есть некоторые общедоступные серверы STUN.
Во-вторых, используйте UPnP и NAT-PMP. Одна библиотека здесь , например.
В-третьих, используйте IPv6. Teredo, который является одним из способов запуска IPv6 поверх IPv4, часто работает, когда ничего из перечисленного не работает, и кто знает, что ваши пользователи могут использовать IPv6 другими способами. Очень мало кода для реализации этого, и это становится все более важным. Я считаю, что около половины данных Bittorrent поступает, например, по IPv6.