iOS 开发中难免会遇到很多与网络方面的判断,这里做个汇总,大多可能是与WiFi相关的。
1.Ping域名、Ping某IP
有时候可能会遇到ping 某个域名或者ip通不通,再做下一步操作。这里的ping与传统的做get或者post请求还是有很大区别的。比如我们连接了某个WiFi,测试ping www.baidu.com,如果能ping 通,基本可以断定可以上网了,但是如果我们做了一个get 请求(url 是www.baidu.com),路由器可能重定向这个WiFi内的某网页了,依然没有错误返回,就会误认为可以正常上网。
这里有关于ping命令的详细解释:百度百科Ping
iOS中想要ping域名或者ip,苹果提供了一个官方例子SimplePing
在例子中,有一个苹果已经封装过的类【SimplePing.h】和【SimplePing.m】
使用起来也相当的简单:
首先创建一个Ping对象:SimplePing *pinger = [[SimplePing alloc]initWithHostName:self.hostName]; self.pinger = pinger;pinger.delegate = self; pinger.addressStyle= SimplePingAddressStyleICMPv4; [pinger start];
然后在start成功的代理方法中,发送数据报文:/** start成功,也就是准备工作做完后的回调 */
-(void)simplePing:(SimplePing*)pingerdidStartWithAddress:(NSData*)address{// 发送测试报文数据
[self.pinger sendPingWithData:nil];}
-(void)simplePing:(SimplePing*)pingerdidFailWithError(NSError*)error{NSLog(@"didFailWithError");
[self.pinger stop];}
其他几个代理方法也非常简单,就简单记录一下:// 发送测试报文成功的回调方法-(void)simplePing:(SimplePing*)pingerdidSendPacket:(NSData*)packetsequenceNumber:(uint16_t)sequenceNumber{NSLog(@"#%u sent", sequenceNumber);}//发送测试报文失败的回调方法-(void)simplePing:(SimplePing*)pingerdidFailToSendPacket:(NSData*)packetsequenceNumber:(uint16_t)sequenceNumbererror:(NSError*)error{NSLog(@"#%u send failed: %@", sequenceNumber, error);}// 接收到ping的地址所返回的数据报文回调方法-(void)simplePing:(SimplePing*)pingerdidReceivePingResponsePacket:(NSData*)packetsequenceNumber:(uint16_t)sequenceN