只是在 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 00bce07ad 24b0040>])
c0a80205 是我要找的 IP => 192.168.2.5
地址是 [Data] ,Apple 说
服务的地址。这是一个 NSData 实例的 NSArray,每个实例都包含一个适合与 connect(2) 一起使用的 struct sockaddr。如果没有为服务解析地址或尚未解析服务,则返回一个空的 NSArray。
我仍然很困惑为什么 Data 不能使用 .btyes ?正如苹果所说“这是一个 NSArray 的 NSData 实例”但我不能像 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));
}
任何建议都会有所帮助,谢谢