По сути, вам нужен сервер (ну, сервер вам НЕ НУЖЕН, но это будет намного проще), который будет хранить IP-адреса пользователей между другими вещами, такими как списки хэшей файлов, и т. д.
Этот сервер может находиться в любой среде, которую вы хотите (что очень удобно).
Затем каждый клиент подключается к серверу (у него должен быть DNS, он может быть бесплатным, я однажды использовал no-ip.com) и сначала отправляет основную информацию (например, свой IP и файл список хэшей), а затем отправляет что-то время от времени (скажем, каждые 5 минут или реже), чтобы сообщить, что он все еще доступен.
Когда клиент ищет файлы/пользователей, он просто спрашивает сервер.
Это централизованная сеть, но общий доступ к файлам будет осуществляться через одноранговые соединения клиент-клиент.
Причина, по которой это делается, заключается в том, что вы не можете знать IP-адрес для подключения без какой-либо ссылки.
Просто чтобы прояснить ситуацию с сервером:
- Торренты используют трекеры.
- eMule ED2K использует серверы lugdunum.
- "Настоящий p2p" Kademlia от eMule использует известные узлы (клиенты) (большую часть времени берется с серверов , подобных этому).
Что не так с Bit-Torrent?
Edit: Существует также предварительно созданная P2P-сеть в операционных системах Microsoft, которая довольно крута в качестве основы для создания чего-либо. http://technet.microsoft.com/en-us/network/bb545868.aspx