IOS测试网络状态

举报
清雨小竹 发表于 2022/09/25 04:42:03 2022/09/25
【摘要】 /第一次打开时判断网络状态- (int) connectedToNetwork{ NSString *kindStr; int kind; //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态 struct sockaddr_in zeroAddress; bzero(&zeroAddre...

  
  1. /第一次打开时判断网络状态
  2. - (int) connectedToNetwork
  3. {
  4. NSString *kindStr;
  5. int kind;
  6. //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
  7. struct sockaddr_in zeroAddress;
  8. bzero(&zeroAddress, sizeof(zeroAddress));
  9. zeroAddress.sin_len = sizeof(zeroAddress);
  10. zeroAddress.sin_family = AF_INET;
  11. // Recover reachability flags
  12. SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
  13. SCNetworkReachabilityFlags flags;
  14. //获得连接的标志
  15. BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
  16. CFRelease(defaultRouteReachability);
  17. //如果不能获取连接标志,则不能连接网络,直接返回
  18. if (!didRetrieveFlags)
  19. {
  20. kindStr = @"获取信息失败";
  21. kind = -1;
  22. }
  23. else{
  24. //根据获得的连接标志进行判断
  25. BOOL isReachable = flags & kSCNetworkFlagsReachable;
  26. BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
  27. if((isReachable && !needsConnection)==YES)
  28. {
  29. ///能够连接网络
  30. if((flags& kSCNetworkReachabilityFlagsIsWWAN)==kSCNetworkReachabilityFlagsIsWWAN)
  31. {
  32. kindStr = @"手机网络";
  33. kind = 0;
  34. }
  35. else
  36. {
  37. kindStr =@"wifi连接网络";
  38. kind = 1;
  39. }
  40. }
  41. else{
  42. kindStr =@"不能连接网络";
  43. kind = -1;
  44. }
  45. }
  46. return kind;
  47. }
  48. 设置网络监听
  49. -(void)SetJianCeNetwork
  50. {
  51. //开启网络状况的监听
  52. [[NSNotificationCenter defaultCenter] addObserver:self
  53. selector:@selector(reachabilityChanged:)
  54. name: kReachabilityChangedNotification
  55. object: nil];
  56. hostReach = [[Reachability reachabilityWithHostname:@"www.xtox.net"] retain];//可以以多种形式初始化
  57. [hostReach startNotifier]; //开始监听,会启动一个run loop
  58. }
  59. // 连接改变
  60. - (void) reachabilityChanged: (NSNotification* )note
  61. {
  62. Reachability* curReach = [note object];
  63. NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
  64. [self updateInterfaceWithReachability: curReach];
  65. }
  66. //处理网络连接改变后的情况
  67. - (void) updateInterfaceWithReachability: (Reachability*) curReach
  68. {
  69. //对连接改变做出响应的处理动作。
  70. NetworkStatus status = [curReach currentReachabilityStatus];
  71. if (status == NotReachable)
  72. { //没有连接到网络就弹出提实况
  73. isNetType = -1;
  74. UIAlertView *alert =[[UIAlertView alloc]initWithTitle:nil message:@"网络连接失败,请检查网络" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
  75. [alert show];
  76. [alert release];
  77. }
  78. else if(status == ReachableViaWiFi ||status == ReachableViaWWAN)
  79. {
  80. if(status == ReachableViaWWAN)
  81. {
  82. isNetType = 0;
  83. }
  84. else if(status == ReachableViaWiFi)
  85. {
  86. isNetType = 1;
  87. }
  88. //
  89. NSThread *initThread = [[NSThread alloc]initWithTarget:self selector:@selector(InitThreadFunc:) object:self];
  90. [initThread start];
  91. return;
  92. }
  93. }
  94. -(void)InitThreadFunc:(id)sender
  95. {
  96. //isNetType = [self connectedToNetwork];
  97. if(isNetType!=-1)
  98. {
  99. if([g_json Test]==YES)
  100. {
  101. [g_json UserLogin:0 pass:nil];
  102. [self GetUpdate];
  103. return;
  104. }
  105. else
  106. {
  107. isNetType = -1;
  108. }
  109. }
  110. }

文章来源: zzzili.blog.csdn.net,作者:清雨小竹,版权归原作者所有,如需转载,请联系作者。

原文链接:zzzili.blog.csdn.net/article/details/8695213

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。