Ios 从Bonjour网络解析主机名

Ios 从Bonjour网络解析主机名,ios,swift,bonjour,nsnetservice,Ios,Swift,Bonjour,Nsnetservice,我有一个使用JmDNS的基于Java的服务器,它是从iOS应用程序中发现的 发现工作正常,这是NetServiceDelegate执行的回调,用于记录详细信息: public func netServiceDidResolveAddress(_ service: NetService) { guard let hostName = service.hostName else { return } mockServerUrl = "http://\(hos

我有一个使用JmDNS的基于Java的服务器,它是从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:

现在我发誓这是可行的,但是现在当我尝试用Alamofire将数据发送到这个端点时,它总是超时

用目标机器的硬编码IP地址替换主机名会使它再次工作,因此发送数据的代码没有根本问题


是否可以从与目标服务器位于同一网络上的iOS设备上解析以“.local.”结尾的上述格式的地址?

问题出在Java服务器端。它正在通过调用InetAddress.getLocalHost()进行注册。这是返回环回地址

我根据以下问题修改了代码以查找非环回地址:

委托方法
netServiceDidResolveAddres
用于解析IPv4和IPv6地址。它对主机名没有影响,主机名在
didFindService
之后不会更改。当我检查地址字段中返回的地址时,我发现它是“127.0.0.1”这对于从手机到服务器的连接似乎没有用。您必须从
netServiceDidResolveAddress
方法中的
地址
数组中提取IPV4或IPv6地址,该方法是包含
struct sockaddr
对象的
(NS)数据
对象数组。是的,我提取了。地址字段中返回的唯一地址是“127.0.0.1”:(