Клиент / сервер 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.