在swift中使用简单的Ping(iOS)
我试图使用苹果的类:简单的平,但我不能得到这个工作。
当我正在运行示例mac os x项目它的工作:
2015-06-17 00:03:22.569 SimplePing [20386:3133535] pinging 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(迅速)的应用程序:
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
其他function不被调用。 为什么?
顺便说一句。 我也试过将pinger移入类variables,如下所示:
var pinger: SimplePing?
没有任何区别。
我怎样才能解决这个问题?
不知道为什么这不起作用,但一旦解决地址,你可以自己调用ping方法。
一个variables告诉你,你可以开始ping:
var canStartPinging = false
调用ping的代码:
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 }