Ios 从Bonjour网络解析主机名
我有一个使用JmDNS的基于Java的服务器,它是从iOS应用程序中发现的 发现工作正常,这是NetServiceDelegate执行的回调,用于记录详细信息: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
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”:(