Подтвердить что ты не робот

Возможно ли подключить два устройства ios с помощью сокетов, получив их IP-адрес?

Я хочу подключить несколько устройств через сокет без какой-либо реализации сервера. Я буду использовать это только для получения IP-адресов устройств, которые будут регистрироваться.

4b9b3361

Ответ 1

Есть две основные проблемы для одноранговой связи: обнаружение и доступность.

Во-первых, вам нужно знать IP-адрес других одноранговых узлов, чтобы подключиться к ним. Когда вы подключитесь к сетке сверстников, все они смогут поддерживать друг друга в состоянии сети, предлагая лучше друг другу друг друга, передавая уведомления о новых сверстниках, которые присоединились и ушли, и т.д. Но у вас есть разработать и внедрить механизм для торговли этой информацией. Что еще более важно, вам нужно что-то перескакивать, потому что, когда новый сверстник запускается, он находится в сетке самого себя, и у него нет никакой информации, чтобы дать себе.

Одна из возможностей состоит в том, чтобы иметь несколько известных "суперпиксеров" (которые вы запускаете), которые всегда связаны, и испечь их адреса в приложении. Или у вас могут быть "серверы внедрения" вместо сверстников, которые выполняют ту же функцию. Или вы можете иметь внешний вид торговых адресов (самым простым является то, что пользователи торгуют ими на веб-форуме или канале IRC или лично и набирают их вручную), которые могут быть автоматизированы в разной степени. Есть также ярлыки, которые могут помочь - Bonjour может получить других сверстников на сетке, если один из них находится в локальной сети; GameCenter/GameKit может использоваться как автоматизированная внешняя торговая сеть; и др.

Как только вы решили проблему обнаружения, у вас все еще есть проблема с достижением. Большинство устройств iOS обычно не имеют общедоступных IP-адресов; вместо этого они отстают от маршрутизаторов, которые осуществляют трансляцию сетевых адресов, будь то домашний маршрутизатор WiFi или сеть сотовой сети 3G. Это означает, что вам нужно как-то сделать NAT Hole Punching, чтобы заставить двух iPhone разговаривать друг с другом. Тот, кто знает как общий адрес, так и внутренний адрес каждого устройства, может организовать для них соединение друг с другом. У вас могут быть либо обычные сверстники, которые делают это (хотя это и делает проблему с Jumpstart еще больше), либо имеют ваши суперперы/серверы ввода /etc. сделайте это.

Если вы хотите создать все это самостоятельно, вы, вероятно, захотите посмотреть на другие реализации. BitTorrent (включая трекеры и DHT) хорошо понимается и документируется на континууме уровней от "ложь к детям" для любопытных конечных пользователей до подробных спецификаций протоколов и реализации с открытым исходным кодом. И затем посмотрите на некоторые другие сети P2P, потому что BitTorrent не совершенен и не пытается делать все, что придумают.

Ответ 2

Вы можете использовать GameKit. Он имеет matchmaking api, который может вам помочь.

Он может использоваться для не-игровых приложений.

Ответ 3

Я работаю над чем-то похожим, и это гигантская боль в заднице. Существует 3 соображения: 1) Достижимость 2) Открытие 3) Само соединение.

1) Даже не рассматривайте возможность использования 3g/4g, это просто не сработает для сохранения открытого сокета.

2) Я бы использовал какое-то брокерское обслуживание между ними в Интернете, чтобы связать их. Для обнаружения вы можете просто указать, какие устройства доступны в службе.

3) Для подключения я считаю, что библиотеки сокетов IOS довольно болезненны, но если вы перейдете на уровень сокета BSD, это не так уж плохо. Я думаю, было бы очень интересно использовать zmq сокеты; что может упростить создание брокерской службы.

Ответ 4

Вы не можете. Если устройство подключено к Интернету с помощью Wi-Fi, возможно, это возможно и полагаться на настройку маршрутизатора, как на ПК. Если какое-либо устройство связано с 3g или gprs protocal, они могут вообще не иметь IP-адреса.

Ответ 5

Создание клиента Jabber для iOS: настройка XMPP

здесь ссылка