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