2017-03-01 109 views
0

我有一個基於Java的服務器,使用從iOS應用程序中發現的JmDNS。從Bonjour網絡中解析主機名

發現工作正常,這是得到由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設備解析?

+0

委託方法'netServiceDidResolveAddres'是解決IPv4和IPv6地址。它對'didFindService'後不改變的主機名沒有影響。 – vadian

+0

當我檢查地址字段中返回的地址時,我發現它是「127.0.0.1」,從手機到服務器的連接似乎沒有用處。 – zorro2b

+0

您必須從'netServiceDidResolveAddress'方法的'addresses'數組中提取IPV4或IPv6地址,該方法是包含'struct sockaddr'對象的'(NS)Data'對象的數組。 – vadian

回答

0

問題出在Java服務器端。它通過調用InetAddress.getLocalHost()進行註冊。這是返回環回地址。

我修改我的代碼基礎上找到這個問題的一個非回送地址: IP Address not obtained in java