2012-02-06 4 views
1

Я разрабатываю приложение IOS, которому необходимо сделать стандартное TCP-соединение с одного iPhone (или iPod) на другое. Соединение работает хорошо между приложениями на симуляторе и устройстве, а также между двумя тренажерами.Подключить() от устройства ios to ios в той же подсети

Приложение использует POSIX соединить(), и я должен придерживаться этого способа, так как другие модули являются чисто С.

При вызове Connect() блоки приложений, и после того, как возвращается ошибка тайм-аута. Связь через Wi-Fi в локальной сети

Я обнюхал трафик и столкнулся с тем, что после подключения к симулятору устройство отправляет ARP, а после ответа отправляется стандартное рукопожатие TCP и сеанс.

В том же корпусе с iPhone <> iPhone останавливается после запроса ARP, потому что другой iPhone не отвечает на него. Кроме того, iOS отправляет только бесплатный ARP (объявляет, что это пара ip ip). Мой MAC, похоже, продолжает этот запрос, потому что его таблица ARP имеет запись iPhone, она не работает для другого iPhone.

Я пробовал работать с bonjour, но он также работает только с симулятором <> устройством.

Мой вопрос: Есть ли способ разрешить такое общение? Возможно ли, что это проблема только с моими iPhone'ами? Есть ли какой-либо явный способ сказать ОС отправить ответ для арп, или он каким-то образом заблокирован для трафика ios <> ios communication.

+0

Я подозреваю, что ARP - это красная сельдь. Можете ли вы рассказать о том, как вы находите IP-адрес другого устройства? Если вы не используете какой-либо широковещательный пакет до установления соединения, вы не можете действительно знать IP-адрес однорангового устройства для подключения к нему - за неправильный IP-адрес ARP выходит из строя по дизайну. –

+0

В моем примере я знаю IP другого устройства, проблема возникает, когда я хочу подключиться (он блокирует, отправляет ARP (на iPhone) для mac peer IP, а после ответа -> таймаут, он возвращается с ошибкой). При подключении к MAC отсутствует ARP, поскольку MAC кэширует iOS безвозмездные сообщения ARP, и он просто отправляет SYN. – macvek

ответ

1

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

Опять же, не уверен, что это помогает в вашей ситуации, но я видел, что эта работа очень хорошо до сих пор.

Смежные вопросы