Разрешение имени хоста из сети Bonjour

У меня есть сервер на основе Java, использующий JmDNS, который обнаруживается из приложения iOS.

Обнаружение работает нормально, и это обратный вызов, который выполняется NetServiceDelegate для записи деталей:

public func netServiceDidResolveAddress(_ service: NetService) {
    guard let hostName = service.hostName else {
        return
    }

    mockServerUrl = "http://\(hostName):\(service.port)/analytics"
    Logger.log("Using mock server at \(mockServerUrl)", forLevel: .info)
}

В результате URL-адрес выглядит следующим образом: http://az-mbp-ether-lan.local.:9090

Теперь я клянусь, что это сработало, однако теперь, когда я пытаюсь отправить данные на эту конечную точку с помощью Alamofire, время ожидания постоянно истекает.

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

Должен ли адрес указанной выше формы заканчиваться на ".local." разрешаться с устройства iOS в той же сети, что и целевой сервер?


person zorro2b    schedule 01.03.2017    source источник
comment
Метод делегата netServiceDidResolveAddres предназначен для разрешения адресов IPv4 и IPv6. Это не влияет на имя хоста, которое не меняется после didFindService.   -  person vadian    schedule 01.03.2017
comment
Когда я проверил адрес, который вернулся в поле адресов, я обнаружил, что это 127.0.0.1, что кажется бесполезным для подключения с телефона к серверу.   -  person zorro2b    schedule 02.03.2017
comment
Вы должны извлечь адреса IPV4 или IPv6 из массива addresses в методе netServiceDidResolveAddress, который представляет собой массив (NS)Data объектов, содержащих struct sockaddr объектов.   -  person vadian    schedule 02.03.2017
comment
Да, я сделал. Единственный адрес, который вернулся в поле адресов, был 127.0.0.1 :(   -  person zorro2b    schedule 02.03.2017


Ответы (1)


Проблема была на стороне Java-сервера. Он регистрировался, вызывая InetAddress.getLocalHost(). Это возвращало петлевой адрес.

Я пересмотрел свой код, чтобы найти адрес без обратной связи на основе этого вопроса: IP-адрес не получен в Java

person zorro2b    schedule 01.03.2017