`
z251257144
  • 浏览: 91504 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

[iOS]网络编程专题:Reachability的使用

    博客分类:
  • iOS
阅读更多

什么是UDPTCP的区别是什么?
TCP的全称为传输控制协议。这种协议可以提供面向连接的、可靠的、点到点的通信。
UDP全称为用户数据报协议,它可以提供非连接的不可靠的点到多点的通信。
TCP还是UDP,那要看你的程序注重哪一个方面?可靠还是快速?

 

 

 

TCP/IP 建立连接的过程 
TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 
第一次握手:建立连接时,客户端发送连接请求到服务器,并进入SYN_SEND状态,等待服务器确认; 
第二次握手:服务器收到客户端连接请求,向客户端发送允许连接应答,此时服务器进入SYN_RECV状态; 
第三次握手:客户端收到服务器的允许连接应答,向服务器发送确认,客户端和服务器进入通信状态,完成三次握手。
 
(所谓的三次握手就是要有三次连接信息的发送/接收过程TCP连接的建立需要进行三次连接信息的发送/接收

 


一:确认网络环境3G/WIFI

    1. 添加源文件和framework
   
    开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审(我们的)查的。
    Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。要在应用程序程序中使用Reachability,首先要完成如下两部:
   
    1.1. 添加源文件:
    在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图:

   
   
    1.2.添加framework:
    将SystemConfiguration.framework 添加进工程。如下图:
   
   
    2. 网络状态
   
    Reachability.h中定义了三种网络状态:
    typedef enum {
        NotReachable = 0,            //无连接
        ReachableViaWiFi,            //使用3G/GPRS网络
        ReachableViaWWAN            //使用WiFi网络
    } NetworkStatus;
   
    因此可以这样检查网络状态:

    Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];
    switch ([r currentReachabilityStatus]) {
            case NotReachable:
                    // 没有网络连接
                    break;
            case ReachableViaWWAN:
                    // 使用3G网络
                    break;
            case ReachableViaWiFi:
                    // 使用WiFi网络
                    break;
    }
   
    3.检查当前网络环境
    程序启动时,如果想检测可用的网络环境,可以像这样
    // 是否wifi
    + (BOOL) IsEnableWIFI {
        return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
    }

    // 是否3G
    + (BOOL) IsEnable3G {
        return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
    }
    例子:
    - (void)viewWillAppear:(BOOL)animated {   
    if (([Reachability reachabilityForInternetConnection].currentReachabilityStatus == NotReachable) &&
            ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == NotReachable)) {
            self.navigationItem.hidesBackButton = YES;
            [self.navigationItem setLeftBarButtonItem:nil animated:NO];
        }
    }

    4. 链接状态的实时通知
    网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户:
   
    Reachability 1.5版本
    // My.AppDelegate.h
    #import "Reachability.h"

    @interface MyAppDelegate : NSObject <UIApplicationDelegate> {
        NetworkStatus remoteHostStatus;
    }

    @property NetworkStatus remoteHostStatus;

    @end

    // My.AppDelegate.m
    #import "MyAppDelegate.h"

    @implementation MyAppDelegate
    @synthesize remoteHostStatus;

    // 更新网络状态
    - (void)updateStatus {
        self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
    }

    // 通知网络状态
    - (void)reachabilityChanged:(NSNotification *)note {
        [self updateStatus];
        if (self.remoteHostStatus == NotReachable) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"AppName", nil)
                         message:NSLocalizedString (@"NotReachable", nil)
                        delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];
            [alert release];
        }
    }

    // 程序启动器,启动网络监视
    - (void)applicationDidFinishLaunching:(UIApplication *)application {
   
        // 设置网络检测的站点
        [[Reachability sharedReachability] setHostName:@"www.apple.com"];
        [[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];
        // 设置网络状态变化时的通知函数
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)
                                                 name:@"kNetworkReachabilityChangedNotification" object:nil];
        [self updateStatus];
    }

    - (void)dealloc {
        // 删除通知对象
        [[NSNotificationCenter defaultCenter] removeObserver:self];
        [window release];
        [super dealloc];
    }
   
    Reachability 2.0版本
   

    // MyAppDelegate.h
    @class Reachability;

        @interface MyAppDelegate : NSObject <UIApplicationDelegate> {
            Reachability  *hostReach;
        }

    @end

    // MyAppDelegate.m
    - (void)reachabilityChanged:(NSNotification *)note {
        Reachability* curReach = [note object];
        NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
        NetworkStatus status = [curReach currentReachabilityStatus];
   
        if (status == NotReachable) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"AppName""
                              message:@"NotReachable"
                              delegate:nil
                              cancelButtonTitle:@"YES" otherButtonTitles:nil];
                              [alert show];
                              [alert release];
        }
    }
                             
    - (void)applicationDidFinishLaunching:(UIApplication *)application {
        // ...
                 
        // 监测网络情况
        [[NSNotificationCenter defaultCenter] addObserver:self
                              selector:@selector(reachabilityChanged:)
                              name: kReachabilityChangedNotification
                              object: nil];
        hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain];
        hostReach startNotifer];
        // ...
    }

 

分享到:
评论

相关推荐

    iOS网络高级编程 iPhone和iPad的企业应用开发

    《iOS网络高级编程:iPhone和iPad的企业应用开发》是一本专为iOS开发者设计的深入学习网络编程技术的书籍。在iOS应用开发中,网络功能是不可或缺的部分,它使得应用程序能够与远程服务器进行交互,获取数据,实现...

    iOS 网络编程

    在iOS开发中,还会用到一些其他的网络编程技术,如Reachability类用于监控网络连接状态,以便在网络状况发生变化时作出相应的处理。此外,应用可能还需要处理网络延迟或无网络状态下的一些逻辑。 WebSockets是在iOS...

    iOS中使用 Reachability 检测网络

    这篇博客文章将深入探讨如何在iOS项目中使用Reachability来监控网络状态,并提供相关的源码分析。 一、 Reachability简介 Reachability是由Tony Million编写的开源库,后来被Apple纳入到其示例代码中,成为iOS...

    ios Reachability

    Reachability是苹果官方提供的一款用于检测iOS设备网络状态的示例代码库,它极大地简化了开发者在应用中检查网络连通性的过程。这个DEMO包含了详细的实现方式和使用示例,帮助开发者理解如何在自己的应用中集成网络...

    ios网络编程

    在iOS开发中,网络编程是不可或缺的一部分,它使得应用程序能够与服务器进行数据交换,实现诸如下载、上传、实时通信等功能。本教程聚焦于iOS的网络编程,特别提到了多线程网络编程,这对于提高用户体验和优化性能至...

    IOS ReachAbility

    IOS 网络编程 ReachAbility头文件和源文件,用于判定网络的连接情况

    iOS 网络检查 Reachability

    总之,Reachability是iOS开发中不可或缺的一部分,它使得开发者能够更好地控制和优化应用在网络条件下的行为。通过正确地使用和理解Reachability,我们可以为用户提供更稳定、更流畅的使用体验。

    iOS网络高级编程(含源码)

    《iOS网络高级编程》这本书是针对iOS开发人员深入学习网络技术的重要参考资料,它涵盖了iOS平台上的网络编程的各种高级主题,并且附带了源码,使读者能够通过实践来加深理解。以下将对这本书中可能涉及的关键知识点...

    ios网络高级编程源代码

    《iOS网络高级编程》是一本深入探讨iOS平台上网络编程技术的专业书籍,主要针对有经验的iOS开发者,旨在提升他们的网络编程能力。这本书涵盖了各种网络通信协议、数据传输方式以及网络应用设计模式,提供了丰富的源...

    swift-Reachability.swift使用Swift写的第三方网络检测类

    Reachability.swift 是一款由Ashley Mills开发的著名第三方库,专为Swift编程语言设计,用于检测iOS、macOS、tvOS以及watchOS等Apple平台上的网络可达性。这个库简化了开发者判断当前设备网络状态的过程,包括是否...

    《iOS网络编程与云端应用最佳实践》精彩书摘

    1. **HTTP/HTTPS协议**:iOS应用通常使用HTTP或更安全的HTTPS协议进行网络通信。HTTP是无状态的,而HTTPS在HTTP基础上增加了SSL/TLS加密,确保数据传输的安全性。 2. **URL Loading System**:苹果提供了一套基于...

    iOS_Reachability

    1. Reachability:这是主要的类,它负责初始化、监测网络状态,并提供网络状态的查询接口。你可以通过传入主机名或者特定的 IP 地址来创建 Reachability 实例,然后开始监听网络状态变化。 2. startNotifier():此...

    Reachability

    Reachability是iOS开发中一个非常重要的工具,它是由著名开发者Tony Million编写的,用于检测设备当前的网络连接状态。在iOS应用开发中,了解设备的网络连接情况是至关重要的,因为许多功能,如数据同步、在线购物、...

    swift-iOS完美的网络状态判断工具

    var reachability: Reachability? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -&gt; Bool { reachability = ...

    Reachability使用说明<转载>

    Reachability是iOS开发中一个非常重要的工具,它用于检测设备的网络可达性,例如Wi-Fi、蜂窝数据等网络状态的变化。这个工具是由斯坦福大学的Scotty Loveless开发的,并且在iOS开发者社区中广泛使用。这篇博客文章...

    ios监测网络状态

    var reachability: Reachability? private init() { guard let reachability = Reachability(reachabilityForInternetConnection()) else { return } self.reachability = reachability reachability....

    获取 ios 系统网络状况、电量

    private var reachability: Reachability? private init() { startMonitoring() } func startMonitoring() { guard let reachability = Reachability.reachability(for: .internetConnection) else { return...

    网络编程总结(IOS)

    以上就是关于iOS网络编程中Reachability的详细介绍,包括如何集成Reachability到项目中、检测不同类型的网络状态以及如何实时响应网络状态的变化等内容。通过这些技术点的学习与实践,可以帮助开发者更好地管理iOS...

    Reachability 网络判断库文件

    Reachability 是一个在iOS和macOS开发中广泛使用的开源库,由Tony Million 创建,用于检测设备的网络连通状态和网络类型。这个库基于Apple的SystemConfiguration框架,它提供了简单易用的接口来帮助开发者判断应用...

    ios网络高级编程,电子书

    4. **网络状态监控**: 使用Reachability类库监测网络状态,包括Wi-Fi、蜂窝数据以及网络是否可达,这对于提供良好的用户体验至关重要。 5. **缓存策略**: URLSession支持HTTP缓存策略,包括不缓存、使用服务器定义...

Global site tag (gtag.js) - Google Analytics