Я делал простую программу передачи файлов через IRC, и когда я читал ее, я увидел, что IRC при совместном использовании файла создает прямое соединение между двумя пользователями независимо от сервера (DCC, Direct Client Connect). После некоторого поиска я нашел это: Direct Connect и Advanced Direct Connect.
Ни одна из этих страниц не отвечает на вопрос, который я не могу выбросить из головы: Возможна ли передача данных P2P без какого-либо пользователя, выполняющего специальную переадресацию портов? Промежуточный сервер, который помогает установить соединение ( как в примерах IRC) разрешено. Сама передача данных не должна зависеть от сервера.