SimplePing的使用

来源:互联网 发布:美孚齿轮油632数据 编辑:程序博客网 时间:2024/05/14 21:49

SimplePing是苹果封装好的关于Ping的类,研究wifi的时候顺带研究下这个类,关于什么是ping以及一些基本用法可以翻看我的博客。下面切入主题:


SimplePing是一个封装低层级的BSD Sockets ping函数的类。
使用这个类创建实例,设置委托然后调用 -start 方法开始在当前的run loop(运行循环)中。

如果顺利的话你很快就会得到 -simplePing:didStartWithAddress: 这个委托的回调。

之后在这个回调里你就可以调用 -sendPingWithData: 来发送一个ping,然后等待接收回调 -simplePing:didReceivePingResponsePacket:sequenceNumber: 和 -simplePing:didReceiveUnexpectedPacket: 

这个类可以在任何线程上使用,但是用作单例必须限制在指定的开启运行循环的线程。


下面介绍这个类中的方法:


- (instancetype)initWithHostName:(NSString *)hostName 

初始化这个对象来ping指定的主机,hostName:ping的主机的域名,一个IPv4或IPv6的字符串类型地址。


SimplePingDelegate

调用 -start 方法后,在线程的默认运行循环模式下相应的回调。


- (void)start;

开始对象,在调用这个方法之前,你应该设置委托和其他参数。如果顺利的话你将会得到

-simplePing:didStartWithAddress: 这个回调,在这个方法内部你可以开始发送pings(

执行-sendPingWithData: 方法),然后通过回调 -simplePing:didReceivePingResponsePacket:sequenceNumber:开始接收ICMP数据包(ping响应),或者回调-simplePing:didReceiveUnexpectedPacket:(返回异常的包,说明有异常)。

如果对象开始失败,通常是因为hostName,你将受到

-simplePing:didFailWithError:这个回调。不要重复调用- (void)start;


- (void)sendPingWithData:(nullableNSData *)data;

发送一个包含指定数据的ping包,发送一个真实的ping,当你调用这个方法的时候,SimplePing的对象必须已经调用了- (void)start;

- (void)start;调用之后,你必须等待-simplePing:didStartWithAddress:的到来才可以使用这个方法,
参数data为nil代表你想让包包括一个标准56位有效荷载。(导致一个标准的64位ping)


- (void)stop;

停止这个对象,当你的ping结束之后你才调用这个方法,可以重复调用。


SimplePingDelegate协议的相关方法

- (void)simplePing:(SimplePing *)pinger didStartWithAddress:(NSData *)address;

一个SimplePing委托回调,- (void)start;被调用之后这个回调会被调用一次。


待续...SimplePing可以百度下载...





1 0