2015-08-24 130 views
0

如何獲取本地網絡中本地主機名(例如「myComputer」)的IP地址(例如192.168.0.1)?如何在Swift中獲取本地網絡中本地主機名的IP地址

我嘗試這樣做:

let host = CFHostCreateWithName(nil,"www.google.com").takeRetainedValue(); 
CFHostStartInfoResolution(host, .Addresses, nil); 
var success: Boolean = 0; 
let addresses = CFHostGetAddressing(host, &success).takeUnretainedValue() as NSArray; 
if (addresses.count > 0){ 
    let theAddress = addresses[0] as NSData; 
    var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0) 
    if getnameinfo(UnsafePointer(theAddress.bytes), socklen_t(theAddress.length), 
     &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 { 
      if let numAddress = String.fromCString(hostname) { 
       println(numAddress) 
      } 
    } 
} 

這工作正常的地址,如「www.google.com」,而不是像「我的電腦」

主機名,我試了一下在Xcode模擬器。在那裏,它的工作原理,但不是在我的iPhone

我會得到錯誤:

fatal error: unexpectedly found nil while unwrapping an Optional value 

...在4號線

感謝您的幫助!

回答

0

本地主機名如myComputer只有當您的iPhone配置爲解析它們(或它們位於hosts文件中)時纔可用於您的iPhone。

要在您的iPhone上解析myComputer,您需要將您的iPhone配置爲使用本地DNS服務器,該服務器將爲本地網絡上的主機名提供IP地址。

您看到的錯誤與未得到結果有關。你需要檢查主機做出決議(CFHostStartInfoResolution爲此提供了一個結果):

let host = CFHostCreateWithName(nil,"www.google.com").takeRetainedValue(); 
var success : Boolean = CFHostStartInfoResolution(host, .Addresses, nil); 
if success > 0 { 
    success = 0; 
    let addresses = CFHostGetAddressing(host, &success).takeUnretainedValue() as NSArray 
    if (addresses.count > 0){ 
     let theAddress = addresses[0] as! NSData; 
     var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0) 
     if getnameinfo(UnsafePointer(theAddress.bytes), socklen_t(theAddress.length), 
      &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 { 
      if let numAddress = String.fromCString(hostname) { 
       println(numAddress) 
      } 
     } 
    } 
} else { 
    println("Host not found!") 
} 
+0

所以你的意思是這樣呢? 讓地址:NSArray? addresses = CFHostGetAddressing(host,&success).takeUnretainedValue()as NSArray; 如果地址== {零回報 「」 } - 不工作,也 – Mario

+0

看到我更新的答案的完整解決方案,你實際上看到的錯誤,你得到'CFHostGetAddressing'響應之前甚至發生。 –

+0

這個工作正常!非常感謝你! – Mario