Да, вы можете (где, как указывает GrandmasterB, каждый узел имеет сокеты как для сервера, так и для клиента).Однако, как вы уже знаете, NAT причинит вам боль.
Если вы не можете использовать промежуточные блоки (серверы с общедоступными IP-адресами, к которым подключаются ваши клиенты (*)) - и вы, возможно, не захотите их,поскольку они скорее противоречат точке P2P - и вы не против описать детали вашего соединения с помощью SDP , вы можете попробовать Interactive Connectivity Instalation .
По сути, ICE пробует разные стратегии для подключения.Это подключаемая архитектура, так что вы можете добавить свои собственные стратегии.По умолчанию ICE описывает методы обхода UDP, но в работе находится расширение для обеспечения возможности подключения по TCP.
(*) Вы всегда можете попробовать такую архитектуру, как IRC, где у вас есть любое числосерверов, пирингующихся между собой, к которым подключаются клиенты.По крайней мере, на полпути к P2P.(Это также в значительной степени архитектура SIP .)