【发布时间】:2017-03-01 09:37:16
【问题描述】:
我有一个使用 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: http://az-mbp-ether-lan.local.:9090
现在我发誓这是有效的,但是现在当我尝试使用 Alamofire 将数据发送到此端点时,它总是超时。
将主机名替换为目标机器的硬编码 IP 地址使其再次工作,因此发送数据的代码不存在根本问题。
上述形式的地址应以“.local”结尾。是否可以从与目标服务器位于同一网络的 iOS 设备解析?
【问题讨论】:
-
委托方法
netServiceDidResolveAddres用于解析IPv4和IPv6地址。对didFindService之后没有变化的主机名没有影响。 -
当我检查地址字段中返回的地址时,我发现它是“127.0.0.1”,这对于从手机到服务器的连接似乎没有用。
-
您必须从
netServiceDidResolveAddress方法中的addresses数组中提取IPV4 或IPv6 地址,该数组是包含struct sockaddr对象的(NS)Data对象数组。 -
是的,我做到了。在地址字段中返回的唯一地址是“127.0.0.1”:(
标签: ios swift bonjour nsnetservice