Je suis assez nouveau dans Swift 3. Je veux obtenir l'adresse IP de mes NetServices que j'ai exploré avec bonjour pour les montrer à l'utilisateur, pas pour se connecter avec l'appareil. Je peux bien rechercher les appareils avec Bonjour et les obtenir énumérés dans un listView avec ce grand code d'accès: https://github.com/ecnepsnai/BonjourSwiftSwift 3 - Vous avez un tableau vide NetService.addresses après avoir exploré bonjour
ceci est ma fonction pour scanner les services de Bonjour et les mettre dans un tableau local de NetServices
// scanning for services, delete old bonjourServices Array and fill it with new discovered services
var bonjourServices = [NetService]()
private func putServicesToArray(){
let browser: Bonjour = Bonjour()
_ = browser.findService(Bonjour.Services.Line_Printer_Daemon, domain: Bonjour.LocalDomain) { (services) in
self.bonjourServices.removeAll()
for service in browser.services {
if !(self.bonjourServices.contains(service)) {
self.bonjourServices.append(service)
}
}
}
}
J'utilise cette méthode pour obtenir l'adresse IP, de Swift 3 how to resolve NetService IP?
func netServiceDidResolveAddress(_ sender: NetService) {
print("netServiceDidResolveAddress get called with \(sender).")
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
guard let data = sender.addresses?.first else {
print("guard let data failed")
return
}
do {
try data.withUnsafeBytes { (pointer:UnsafePointer<sockaddr>) -> Void in
guard getnameinfo(pointer, socklen_t(data.count), &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 else {
throw NSError(domain: "domain", code: 0, userInfo: ["error":"unable to get ip address"])
}
}
} catch {
print(error)
return
}
let address = String(cString:hostname)
print("Adress:", address)
}
et avec ce IBAction je veux juste imprimer l'adresse IP, mais mon ip est vide et mon bonjourServices[0].addresses
est vide aussi le addresses.adress NSData Objets
@IBAction func detectNetwork(_ sender: UIButton) {
print("putServiceToArray: ")
putServicesToArray()
for service in bonjourServices {
print(service)
}
bonjourTableView.reloadData()
if !(bonjourServices.isEmpty){
print(netServiceDidResolveAddress(bonjourServices[0]))
print(bonjourServices[0].addresses)
}
}
il y a ma sortie de la console:
netServiceDidResolveAddress get called with <NSNetService 0x61800003d6a0> local. _printer._tcp. Brother HL-3152CDW series.
garde laissez les données ont échoué () en option ([])
il serait si gentil, si quelqu'un pouvait m'aider!
quelqu'un? toujours à la recherche d'une solution. ce serait sympa d'avoir de l'aide – Melf11