检测网络的连通性,一般会用 ping 操作。即向主机发送一个 ICMP 包。苹果的SimplePing 代码中帮我们实现了一个简单的 ping 操作。即封装了底层往主机发 ICMP 包的过程。但是这个 ping 操作还是过于简陋,它只管了如何发 ICMP 包。对一些典型的业务场景,比如检测网络连通性,使用起来还是相对复杂。
DJPingAction 就是在苹果的SimplePing基础上进行了封装。
封装了 SimplePing 的各种代理。一般情况下,我们对 Ping 的发包过程并不关心,只关心包的到达结果。因此对外只提供包到达结果即可。
封装了超时的机制。SimplePing 只是管了发 ICMP 包,并没有对超时没有收到包的情况做处理。
封装了对象管理。调用DJPingAction startWithHost:timeOutLimit:stopWhenReached:maxCount:feedback:complete
之后,内部会维护一个 DJPingAction 对象,在 complete 的 block 返回之后,这个对象依然存在。不需要再调用地方维护 DJPingAction 对象。
让 ping 的动作在单独的线程中执行。
pod 'DJPingAction'
#import "DJPingAction.h"
// host: 主机名
// timeOutLimit: ICMP包发出去之后,多久没收到即认为超时.单位 秒.
// stopWhenReached: 是否已经收到一个成功包之后,后面的包就不用再发了.一般用于典型的网络连通性检测中.
// maxCount: 最大包的个数
// feedback: 每个包的发送结果回调
// complete: ping动作完成之后的回调. 执行这个回调之后,释放所有内部对象.
[DJPingAction startWithHost:@"qq.com"
timeOutLimit:1.0f
stopWhenReached:NO
maxCount:3
feedback:^(DJPingItem *item) {
NSLog(@"ping Action item = %@",item);
} complete:^{
NSLog(@"ping Action finished!");
}];