Ответ 1
Есть две основные проблемы для одноранговой связи: обнаружение и доступность.
Во-первых, вам нужно знать IP-адрес других одноранговых узлов, чтобы подключиться к ним. Когда вы подключитесь к сетке сверстников, все они смогут поддерживать друг друга в состоянии сети, предлагая лучше друг другу друг друга, передавая уведомления о новых сверстниках, которые присоединились и ушли, и т.д. Но у вас есть разработать и внедрить механизм для торговли этой информацией. Что еще более важно, вам нужно что-то перескакивать, потому что, когда новый сверстник запускается, он находится в сетке самого себя, и у него нет никакой информации, чтобы дать себе.
Одна из возможностей состоит в том, чтобы иметь несколько известных "суперпиксеров" (которые вы запускаете), которые всегда связаны, и испечь их адреса в приложении. Или у вас могут быть "серверы внедрения" вместо сверстников, которые выполняют ту же функцию. Или вы можете иметь внешний вид торговых адресов (самым простым является то, что пользователи торгуют ими на веб-форуме или канале IRC или лично и набирают их вручную), которые могут быть автоматизированы в разной степени. Есть также ярлыки, которые могут помочь - Bonjour может получить других сверстников на сетке, если один из них находится в локальной сети; GameCenter/GameKit может использоваться как автоматизированная внешняя торговая сеть; и др.
Как только вы решили проблему обнаружения, у вас все еще есть проблема с достижением. Большинство устройств iOS обычно не имеют общедоступных IP-адресов; вместо этого они отстают от маршрутизаторов, которые осуществляют трансляцию сетевых адресов, будь то домашний маршрутизатор WiFi или сеть сотовой сети 3G. Это означает, что вам нужно как-то сделать NAT Hole Punching, чтобы заставить двух iPhone разговаривать друг с другом. Тот, кто знает как общий адрес, так и внутренний адрес каждого устройства, может организовать для них соединение друг с другом. У вас могут быть либо обычные сверстники, которые делают это (хотя это и делает проблему с Jumpstart еще больше), либо имеют ваши суперперы/серверы ввода /etc. сделайте это.
Если вы хотите создать все это самостоятельно, вы, вероятно, захотите посмотреть на другие реализации. BitTorrent (включая трекеры и DHT) хорошо понимается и документируется на континууме уровней от "ложь к детям" для любопытных конечных пользователей до подробных спецификаций протоколов и реализации с открытым исходным кодом. И затем посмотрите на некоторые другие сети P2P, потому что BitTorrent не совершенен и не пытается делать все, что придумают.