我在尝试使用Swift 3编写Bonjour。
这是我的代码,我可以接收到委托。
func netServiceDidResolveAddress(_ sender: NetService) {
print("netServiceDidResolveAddress service name \(sender.name) of type \(sender.type)," +
"port \(sender.port), addresses \(sender.addresses)")
}
这是我的结果:
netServiceDidResolveAddress 服务名称为Webber的Mac mini,类型为_myapp._tcp.,端口为5678,地址为可选项([<1002162e c0a80205 00000000 00000000>, <1c1e162e 00000000 fe800000 00000000 00bce7ad 24b4b7e8 08000000>])
c0a80205 是我要查找的IP => 192.168.2.5
而地址是[Data],苹果公司说
服务的地址。这是一个NSData实例的NSArray,每个实例包含一个单独的sockaddr结构,适用于connect(2)。如果未解析服务的地址或服务尚未解析,则返回一个空的NSArray。
我仍然困惑为什么不能使用Data .bytes?因为苹果公司说:“这是一个NSData实例的NSArray”,但我无法像NSData一样使用它。
那么如何将地址解析为可读的IP字符串呢?
我之前尝试过这样做,但没有得到我期望的结果...
let thedata = NSData(bytes: sender.addresses, length: (sender.addresses?.count)!)
var storage = sockaddr_storage()
thedata.getBytes(&storage, length: sizeof(sockaddr_storage))
if Int32(storage.ss_family) == AF_INET {
let addr4 = withUnsafePointer(&storage) {UnsafePointer<sockaddr_in>($0).pointee }
print(inet_ntoa(addr4.sin_addr));
}
任何建议都将有所帮助,谢谢。
withUnsafeBytes <R>(_:(UnsafeRawBufferPointer)throws-> R)rethrows-> R
”。你能告诉我如何解决这个问题吗?苹果的文档对我来说太难了。 - KaasCoder