[html]/////////第一次開啟時判斷網路狀態 - (int) connectedToNetwork { NSString *kindStr; int kind; //建立零地址,0.0.0.0的地址表示查詢原生網路連接狀態 struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); SCNetworkReachabilityFlags flags; //獲得串連的標誌 BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); CFRelease(defaultRouteReachability); //如果不能擷取串連標誌,則不能串連網路,直接返回 if (!didRetrieveFlags) { kindStr = @"擷取資訊失敗"; kind = -1; } else{ //根據獲得的串連標誌進行判斷 BOOL isReachable = flags & kSCNetworkFlagsReachable; BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; if((isReachable && !needsConnection)==YES) { ///能夠串連網路 if((flags& kSCNetworkReachabilityFlagsIsWWAN)==kSCNetworkReachabilityFlagsIsWWAN) { kindStr = @"行動電話通訊"; kind = 0; } else { kindStr =@"wifi串連網路"; kind = 1; } } else{ kindStr =@"不能串連網路"; kind = -1; } } return kind; } ////////////////設定網路監聽 -(void)SetJianCeNetwork { //開啟網路狀況的監聽 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil]; hostReach = [[Reachability reachabilityWithHostname:@"www.xtox.net"] retain];//可以以多種形式初始化 [hostReach startNotifier]; //開始監聽,會啟動一個run loop } // 串連改變 - (void) reachabilityChanged: (NSNotification* )note { Reachability* curReach = [note object]; NSParameterAssert([curReach isKindOfClass: [Reachability class]]); [self updateInterfaceWithReachability: curReach]; } //處理網路連接改變後的情況 - (void) updateInterfaceWithReachability: (Reachability*) curReach { //對串連改變做出響應的處理動作。 NetworkStatus status = [curReach currentReachabilityStatus]; if (status == NotReachable) { //沒有串連到網路就彈出提實況 isNetType = -1; UIAlertView *alert =[[UIAlertView alloc]initWithTitle:nil message:@"網路連接失敗,請檢查網路" delegate:self cancelButtonTitle:@"確定" otherButtonTitles: nil]; [alert show]; [alert release]; } else if(status == ReachableViaWiFi ||status == ReachableViaWWAN) { if(status == ReachableViaWWAN) { isNetType = 0; } else if(status == ReachableViaWiFi) { isNetType = 1; } // NSThread *initThread = [[NSThread alloc]initWithTarget:self selector:@selector(InitThreadFunc:) object:self]; [initThread start]; return; } } -(void)InitThreadFunc:(id)sender { //isNetType = [self connectedToNetwork]; if(isNetType!=-1) { if([g_json Test]==YES) { [g_json UserLogin:0 pass:nil]; [self GetUpdate]; return; } else { isNetType = -1; } } }