Просто пробую Bonjour в Swift 3
Вот мой код, я могу получить делегата
func netServiceDidResolveAddress(_ sender: NetService) {
print("netServiceDidResolveAddress service name \(sender.name) of type \(sender.type)," +
"port \(sender.port), addresses \(sender.addresses)")
}
И вот мой результат
имя службы netServiceDidResolveAddress Mac mini Уэббера типа _myapp._tcp., порт 5678, адреса Необязательный ([‹1002162e c0a80205 00000000 00000000>, ‹1c1e162e 00000000 fe800000 00000000 00b4bce7ad 00b4bce7ad 00b4bce700000000000000000000)
c0a80205 - это IP-адрес, который я ищу => 192.168.2.5
И адрес [Данные] , Apple говорит
Адреса службы. Это NSArray экземпляров NSData, каждый из которых содержит одну структуру sockaddr, подходящую для использования с connect(2). В случае, если адреса для службы не разрешены или служба еще не разрешена, возвращается пустой NSArray.
Я все еще не понимаю, почему Data не может использовать .btyes? Как Apple говорит: «Это 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));
}
Любое предложение поможет, спасибо