Клиент / сервер GCDAsyncSocket не работает через точку доступа iOS

У меня очень простая реализация клиент / сервер TCP с использованием GCDAsyncSocket (7.5.0), и я использую NSNetService для открытия службы. Он используется только в локальной сети Wi-Fi и работает в течение 2 лет без проблем (просто сказать: я правильно использую GCDAsyncSocket).

... Пока я не попытался использовать третье устройство iOS в качестве точки доступа, обеспечивающей сеть Wi-Fi, к которой подключаются клиент и сервер.

То же самое, когда третье устройство iOS соединяет и клиент, и сервер, разделяя его соединение через Bluetooth.

Обнаружение службы в порядке, но как только я получаю IP-адрес и порт, я не могу подключиться и получить эту ошибку:

Error Domain=NSPOSIXErrorDomain Code=64 "Host is down" UserInfo={NSLocalizedDescription=Host is down, NSLocalizedFailureReason=Error in connect() function}

Я попытался ограничиться IPv4 и IPv6 (оба обеспечиваются обнаружением службы), я также попытался использовать ветку git ipv6 репозитория GCDAsyncSocket и различные параметры.

Мой основной вопрос: возможно ли установить простое TCP-соединение через Wi-Fi или Bluetooth-точку доступа iOS, если да, то как?

Мой второй вопрос: почему NSNetService служба обнаружения работы а не простое TCP соединение? Я знаю, что протоколы несопоставимы, но все же меня это смущает.

1 ответ

Мне кажется, что ваша проблема заключается в соединении с сотовой сетью. При подключении к сотовой сети это вызывает проблемы с IP-адресом. Обратитесь к этому обсуждению со страницы Cocoaasyncsocket Github.

Другие вопросы по тегам