2015-06-16 187 views
2

我在嘗試使用Apple的類:簡單的Ping,但是我無法得到這個工作。在Swift中使用簡單的Ping(iOS)

當我跑步例如Mac OS X的項目它的工作:

2015-06-17 00:03:22.569 SimplePing [20386:3133535]查驗192.168.1.102

2015-06 -17 00:03:22.569 SimplePing [20386:3133535]#0發送

2015-06-17 00:03:22.570 SimplePing [20386:3133535]#0接收到的

2015-06-17 00: 03:23.570 SimplePing [20386:3133535]#1發送

2015-06-17 00:03:23.571 SimplePing [20386:3133535]#1接收

等。

但是,當我這樣做,從我的IOS(SWIFT)的應用程序:

let pinger = SimplePing(hostName: "192.168.1.102") 
pinger.delegate = self; 
pinger.start() 

do { 
    NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture() as! NSDate) 
} while(pinger != nil) 

不確定是否.. while循環是需要的 - 可能不需要。無論如何,我嘗試沒有它。

而且我已經添加SimplePingDelegate上我的課:

func simplePing(pinger: SimplePing!, didFailToSendPacket packet: NSData!, error: NSError!) { 
     println("didFailToSendPacket") 
    } 

    func simplePing(pinger: SimplePing!, didFailWithError error: NSError!) { 
     println("didFailWithError") 
    } 

    func simplePing(pinger: SimplePing!, didReceivePingResponsePacket packet: NSData!) { 
     println("didReceivePingResponsePacket") 
    } 

    func simplePing(pinger: SimplePing!, didReceiveUnexpectedPacket packet: NSData!) { 
     println("didReceiveUnexpectedPacket") 
    } 

    func simplePing(pinger: SimplePing!, didSendPacket packet: NSData!) { 
     println("didSendPacket") 
    } 

    func simplePing(pinger: SimplePing!, didStartWithAddress address: NSData!) { 
     println("didStartWithAddress") 
    } 

所以它給了我輸出:

2015-06-17 00:32:12.368用[938:150352] CFHostStartInfoResolution

2015-06-17 00:32:12.374用[938:150352]> HostResolveCallback

didStartWithAddress

其他函數不被調用。爲什麼?

Btw。我也嘗試將pinger移入類變量,如下所示:

var pinger: SimplePing? 

沒有任何區別。

我該如何解決這個問題?

回答

1

不知道爲什麼這不起作用,但一旦地址解析後,您可以自己調用ping方法。

一個變量來告訴你,你就可以開始執行ping命令:

var canStartPinging = false 

調用平代碼:

let pinger = SimplePing(hostName: "www.apple.com") 
pinger.delegate = self; 
pinger.start() 

do { 
    if (canStartPinging) { 
     pinger.sendPingWithData(nil) 
    } 
    NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture() as! NSDate) 
} while(pinger != nil) 

SimplePing委託方法等待,然後才能開始執行ping命令:

func simplePing(pinger: SimplePing!, didStartWithAddress address: NSData!) { 
    println("didStartWithAddress") 
    canStartPinging = true 
} 
+0

就是這樣!我錯過了sendPingWithData!不知道爲什麼蘋果的例子沒有,並且工作.. – Makalele

+0

你能解釋這個片段嗎?做{ 如果(canStartPinging){ pinger.sendPingWithData(無)//對於我來說,在這裏崩潰} NSRunLoop.currentRunLoop()runMode(NSDefaultRunLoopMode,beforeDate:NSDate.distantFuture()爲的NSDate)//如果我不要使用這個代表永遠不會調用 } while(pinger!= nil) –

+0

@Artal - 你知道我們如何用簡單的Ping來ping多個IP地址嗎? –