Клиент/сервер 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-соединение? Я знаю, что протоколы несопоставимы, но все равно меня это смущает.


person Pierre Mardon    schedule 29.09.2016    source источник


Ответы (1)


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

person James    schedule 15.10.2016
comment
Да, это звучит так. Я хотел бы найти обходной путь для установления соединения, но до сих пор неясно, смогу ли я этого добиться и как: если я не могу найти IP-адрес своего сервера, как клиент может подключиться к нему? - person Pierre Mardon; 14.04.2017