µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÃÇËù½éÉܵÄiPhoneÓëÆäËûϵͳµÄÍøÂç½»»¥¶¼ÊÇ»ùÓÚÒ»ÇÐÕý³£Õâ¸ö¼ÙÉè¡£±¾Õ½«»á·ÅÆúÕâ¸ö¼ÙÉ裬²¢ÉîÈë̽¾¿ÍøÂçµÄÕæÊµÊÀ½ç¡£ÔÚÕæÊµÊÀ½çÖУ¬ÊÂÇéÊÇ»á³ö´íµÄ£¬ÓÐʱ¿ÉÄÜÊǷdz£ÑÏÖØµÄ´íÎó£ºÊÖ»ú½øÈëÓëÀë¿ªÍøÂç¡¢°ü¶ªµô»òÊÇÑÓ³Ù£»ÍøÂç»ù´¡ÉèÊ©³ö´í£»Å¼¶ûÓû§»¹»á³ö´í¡£Èç¹ûÒ»ÇÐÕý³££¬ÄÇô±àдiOSÓ¦Óþͻá¼òµ¥²»ÉÙ£¬²»¹ýÒź¶µÄÊÇÏÖʵ²¢·ÇÈç´Ë¡£±¾Õ½«»á̽ÌÖµ¼ÖÂÍøÂç²Ù×÷ʧ°ÜµÄ¼¸¸öÒòËØ£¬½éÉÜϵͳÈçºÎ½«Ê§°ÜÇé¿ö¸æÖªÓ¦Óã¬Ó¦ÓÃÓÖ¸ÃÈçºÎÓÅÑŵØÍ¨ÖªÓû§¡£´ËÍ⣬±¾Õ»¹½«½éÉÜÈçºÎÔÚ²»ÍùÓ¦ÓÃÂß¼ÖÐÌí¼Ó´íÎó´¦Àí´úÂëµÄÇé¿öÏ£¬ÒÔÒ»ÖÖÕû½àÇÒÒ»Öµķ½Ê½´¦Àí´íÎóµÄÈí¼þģʽ¡£
5.1 Àí½â´íÎóÔ´
ÔçÆÚµÄiOSÓиöºÜ°ôµÄÌìÆøÔ¤±¨Ó¦Óá£ËüÔÚWi-FiºÍÐźÅÁ¼ºÃµÄ·äÎÑÍøÂçÏÂʹÓÃÕý³££¬²»¹ýµ±ÍøÂçÖÊÁ¿²»ÄÇôºÃʱ£¬Õâ¸öÌìÆøÔ¤±¨Ó¦ÓþÍÏñ¸ÐÃ°ËÆµÄ£¬ÔÚÖ÷ÆÁÄ»ÉϱÀÀ£¡£Óв»ÉÙÓ¦ÓÃÔÚ³öÏÖÍøÂç´íÎóʱ±íÏֺܲ£¬»á·è¿ñµ¯³ö´óÁ¿UIAlertViewÒÔ¸æËßÓû§³öÏÖÁË¡°404
Error on Server X¡±µÈÀàËÆÐÅÏ¢¡£»¹ÓкܶàÓ¦ÓÃÔÚÍøÂç±äÂýʱ½çÃæ»á±äµÃûÓÐÏìÓ¦¡£ÕâЩÇé¿öµÄ³öÏÖ¶¼ÊÇûÓкܺõØÀí½âÍøÂçʧ°ÜģʽÒÔ¼°Ã»ÓÐÔ¤ÆÚµ½¿ÉÄܵÄÍøÂç½µ¼¶»òÊÇʧ°Ü¡£Èç¹ûÏëÒª±ÜÃâÕâÀà´íÎó²¢Äܹ»³ä·ÖµØ´¦ÀíÍøÂç´íÎó£¬ÄÇôÄãÊ×ÏÈÐèÒªÀí½âËüÃÇµÄÆðÔ´¡£
¿¼ÂÇÒ»¸ö×Ö½ÚÊÇÈçºÎ´ÓÉ豸·¢ÍùÔ¶³Ì·þÎñÆ÷ÒÔ¼°ÈçºÎ´ÓÔ¶³Ì·þÎñÆ÷½«Õâ¸ö×Ö½Ú½ÓÊÕµ½É豸£¬Õâ¸ö¹ý³ÌÖ»ÐèÒª¼¸°ÙºÁÃëµÄʱ¼ä£¬²»¹ýÈ´ÒªÇóÍøÂçÉ豸¶¼ÄÜÕý³£¹¤×÷²ÅÐС£Éè±¸ÍøÂçÓëÍøÂ绥ÁªµÄ¸´ÔÓÐÔµ¼ÖÂÁË·Ö²ãÍøÂçµÄ²úÉú¡£·Ö²ãÍøÂ罫ÕâÖÖ¸´ÔÓ»·¾³»®·Ö³ÉÁ˸ü¼ÓÒ×ÓÚ¹ÜÀíµÄÄ£¿é¡£ËäÈ»Õâ¶Ô³ÌÐòÔ±ºÜÓаïÖú£¬²»¹ýµ±Êý¾ÝÔÚ¸÷¸ö²ãÖ®¼äÁ÷¶¯Ê±¿ÉÄÜ»á²úÉú֮ǰÌáµ½µÄÍøÂç´íÎó¡£Í¼5-1չʾÁËInternetÐÒéÕ»µÄ¸÷¸ö²ã´Î¡£

ͼ5-1
ÿһ²ã¶¼»áÖ´ÐÐijÖÖ´íÎó¼ì²â£¬Õâ¿ÉÄÜÊÇÊýѧÒâÒåÉϵġ¢Âß¼ÒâÒåÉϵ쬻òÊÇÆäËûÀàÐ͵ļì²â¡£±ÈÈ磬µ±ÍøÂç½Ó¿Ú²ã½ÓÊÕµ½Ä³Ò»Ö¡Ê±£¬ËüÊ×ÏÈ»áͨ¹ý´íÎóУÕýÂëÀ´ÑéÖ¤ÄÚÈÝ£¬Èç¹û²»Æ¥Å䣬ÄÇô´íÎó¾Í²úÉúÁË¡£Èç¹ûÕâ¸öÖ¡¸ù±¾¾ÍûÓе½´ï£¬ÄǾͻá²úÉú³¬Ê±»òÊÇÁ¬½ÓÖØÖᣴíÎó¼ì²â³öÏÖÔÚÕ»µÄÿһ²ã£¬×Ô϶øÉÏÖ±µ½Ó¦Óò㣬ӦÓòãÔò»á´ÓÓï·¨ºÍÓïÒåÉϼì²éÏûÏ¢¡£
ÔÚʹÓÃiOSÖеÄURL¼ÓÔØÏµÍ³Ê±£¬ËäÈ»ÊÖ»úÓë·þÎñÆ÷Ö®¼äµÄÁ¬½Ó¿ÉÄÜ»á³öÏÖ¸÷ÖÖ¸÷ÑùµÄÎÊÌ⣬²»¹ý¿ÉÒÔ½«ÕâЩÔÒò·Ö³É3ÖÖ´íÎóÀà±ð£¬·Ö±ðÊDzÙ×÷ϵͳ´íÎó¡¢HTTP´íÎóÓëÓ¦ÓôíÎó¡£ÕâЩ´íÎóÀà±ðÓë´´½¨HTTPÇëÇóµÄ²Ù×÷ÐòÁÐÏà¹Ø¡£Í¼5-2չʾÁËÏòÓ¦Ó÷þÎñÆ÷·¢³öµÄHTTPÇëÇó(ÌṩÀ´×ÔÓÚÆóÒµÍøÂçµÄһЩÊý¾Ý)µÄ¼òµ¥ÐòÁÐͼ¡£Ã¿¿éÒõÓ°ÇøÓò¶¼±íʾÕâ3ÖÖ´íÎóÀàÐ͵ĴíÎóÓò¡£µäÐ͵أ¬²Ù×÷ϵͳ´íÎóÊÇÓÉHTTP·þÎñÆ÷ÎÊÌâµ¼Öµġ£HTTP´íÎóÊÇÓÉHTTP·þÎñÆ÷»òÓ¦Ó÷þÎñÆ÷µ¼Öµġ£Ó¦ÓôíÎóÊÇÓÉÇëÇó´«ÊäµÄÊý¾Ý»òÓ¦Ó÷þÎñÆ÷²éѯµÄÆäËûϵͳµ¼Öµġ£

ͼ5-2
Èç¹ûÇëÇóÊǰ²È«µÄHTTPSÇëÇ󣬻òÊÇHTTP·þÎñÆ÷±»Öض¨Ïò¿Í»§¶Ë£¬ÄÇôÉÏÃæÕâ¸öÐòÁеIJ½Ö轫»á±äµÃ¸ü¼Ó¸´ÔÓ¡£ÉÏÊöºÜ¶à²½Öè¶¼°üº¬×Å´óÁ¿µÄ×Ó²½Ö裬±ÈÈçÔÚ½¨Á¢TCPÁ¬½ÓÊ±Éæ¼°µÄSYNÓëSYN-ACK°üÐòÁеȡ£ÏÂÃæ½«»áÏêϸ½éÉÜÿһÖÖ´íÎóÀà±ð¡£
5.1.1 ²Ù×÷ϵͳ´íÎó
²Ù×÷ϵͳ´íÎóÊÇÓÉÊý¾Ý°üûÓе½´ïÔ¤¶¨Ä¿±êµ¼Öµġ£Êý¾Ý°ü¿ÉÄÜÊǽ¨Á¢Á¬½ÓµÄÒ»²¿·Ö£¬Ò²¿ÉÄÜλÓÚÁ¬½Ó½¨Á¢µÄÖмä½×¶Î¡£OS´íÎó¿ÉÄÜÓÉÈçÏÂÔÒòÔì³É£º
1.ûÓÐÍøÂ硪¡ªÈç¹ûÉ豸ûÓÐÊý¾ÝÍøÂçÁ¬½Ó£¬ÄÇôÁ¬½Ó³¢ÊԺܿì¾Í»á±»¾Ü¾ø»òÊÇʧ°Ü¡£ÕâЩÀàÐ͵ĴíÎó¿ÉÒÔͨ¹ýAppleÌṩµÄReachability¿ò¼Ü¼ì²âµ½£¬±¾½ÚºóÃæ½«»á¶Ô´Ë½øÐнéÉÜ¡£
2.ÎÞ·¨Â·Óɵ½Ä¿±êÖ÷»ú¡ª¡ªÉ豸¿ÉÄÜÓÐÍøÂçÁ¬½Ó£¬²»¹ýÁ¬½ÓµÄÄ¿±ê¿ÉÄÜλÓÚ¸ôÀëµÄÍøÂçÖлòÊÇ´¦ÓÚÀëÏß״̬¡£ÕâЩ´íÎóÓÐʱ¿ÉÒÔÓɲÙ×÷ϵͳѸËÙ¼ì²âµ½£¬²»¹ýÒ²ÓпÉÄܵ¼ÖÂÁ¬½Ó³¬Ê±¡£
3.ûÓÐÓ¦ÓüàÌýÄ¿±ê¶Ë¿Ú¡ª¡ªÔÚÇëÇóµ½´ïÄ¿±êÖ÷»úºó£¬Êý¾Ý°ü»á±»·¢Ë͵½ÇëÇóÖ¸¶¨µÄ¶Ë¿ÚºÅ¡£Èç¹ûûÓзþÎñÆ÷¼àÌýÕâ¸ö¶Ë¿Ú»òÊÇÓÐÌ«¶àµÄÁ¬½ÓÇëÇóÔÚÅŶӣ¬ÄÇôÁ¬½ÓÇëÇó¾Í»á±»¾Ü¾ø¡£
4.ÎÞ·¨½âÎöÄ¿±êÖ÷»úÃû¡ª¡ªÈç¹ûÎÞ·¨½âÎöÄ¿±êÖ÷»úÃû£¬ÄÇôURL¼ÓÔØÏµÍ³¾Í»á·µ»Ø´íÎó¡£Í¨³£Çé¿öÏ£¬ÕâЩ´íÎóÊÇÓÉÅäÖôíÎó»òÊdz¢ÊÔ·ÃÎÊûÓÐÍⲿÃû×Ö½âÎöÇÒ´¦ÓÚ¸ôÀëÍøÂçÖеÄÖ÷»úÔì³ÉµÄ¡£
ÔÚiOSµÄURL¼ÓÔØÏµÍ³ÖУ¬²Ù×÷ϵͳ´íÎó»áÒÔNSError¶ÔÏóµÄÐÎʽ·¢Ë͸øÓ¦Óá£iOSͨ¹ýNSErrorÔÚÈí¼þ×é¼þ¼ä´«µÝ´íÎóÐÅÏ¢¡£Ïà±È¼òµ¥µÄ´íÎó´úÂëÀ´Ëµ£¬Ê¹ÓÃNSErrorµÄÖ÷ÒªÓÅÊÆÔÚÓÚNSError¶ÔÏó°üº¬ÁË´íÎóÓòÊôÐÔ¡£
²»¹ý£¬NSError¶ÔÏóµÄʹÓò¢²»ÏÞÓÚ²Ù×÷ϵͳ¡£Ó¦ÓÿÉÒÔ´´½¨×Ô¼ºµÄNSError¶ÔÏó£¬Ê¹ÓÃËüÃÇÔÚÓ¦ÓÃÄÚ´«µÝ´íÎóÏûÏ¢¡£ÈçÏ´úÂëÆ¬¶ÎչʾµÄÓ¦Ó÷½·¨Ê¹ÓÃNSErrorÏòµ÷ÓõÄÊÓͼ¿ØÖÆÆ÷´«µÝ»ØÊ§°ÜÐÅÏ¢£º
-(id)fetchMyStuff:(NSURL*)url error:(NSError**)error { BOOL errorOccurred = NO; // some code that makes a call and may fail if(errorOccurred) //some kind of error { NSMutableDictionary *errorDict = [NSMutableDictionary dictionary]; [errorDictsetValue:@"Failed to fetch my stuff" forKey:NSLocalizedDescriptionKey]; *error = [NSErrorerrorWithDomain:@"myDomain" code:kSomeErrorCode userInfo:errorDict]; return nil; } else { return stuff } } |
ÓòÊôÐÔ¸ù¾Ý²úÉú´íÎó´úÂëµÄ¿â»ò¿ò¼Ü¶ÔÕâЩ´íÎó´úÂë½øÐиôÀë¡£½èÖúÓò£¬¿ò¼Ü¿ª·¢ÕßÎÞÐëµ£Ðĸ²¸Ç´íÎó´úÂ룬ÒòΪÓòÊôÐÔ¶¨ÒåÁ˲úÉú´íÎóµÄ¿ò¼Ü¡£±ÈÈ磬¿ò¼ÜA
ÓëB ¶¼»á²úÉú´íÎó´úÂë1£¬²»¹ýÕâÁ½¸ö´íÎó´úÂë»á±»Ã¿¸ö¿ò¼ÜÌṩµÄΨһÓòÖµ½øÐÐÇø·Ö¡£Òò´Ë£¬Èç¹û´úÂëÐè񻂿·ÖNSError
Öµ£¬¾Í±ØÐë¶ÔNSError ¶ÔÏóµÄcode Óëdomain ÊôÐÔ½øÐбȽϡ£
NSError ¶ÔÏóÓÐÈçÏÂ3 ¸öÖ÷ÒªÊôÐÔ£º
1.code¡ª¡ª±êʶ´íÎóµÄNSInteger Öµ¡£¶ÔÓÚ²úÉú¸Ã´íÎóµÄ´íÎóÓòÀ´Ëµ£¬Õâ¸öÖµÊÇΨһµÄ¡£
2.domain ¡ª¡ª Ö¸¶¨´íÎóÓòµÄNSString Ö¸Õ룬 ±ÈÈçNSPOSIXErrorDomain
¡¢NSOSStatusErrorDomain ¼°NSMachErrorDomain¡£
3.userInfo¡ª¡ªNSDictionary Ö¸Õ룬ÆäÖаüº¬Ìض¨ÓÚ´íÎóµÄÖµ¡£
URL ¼ÓÔØÏµÍ³ÖвúÉúµÄºÜ¶à´íÎó¶¼À´×ÔÓÚNSURLErrorDomain
Óò£¬´úÂëÖµ»ù±¾É϶¼À´×ÔÓÚCFNetworkErrors.h Öж¨ÒåµÄ´íÎó´úÂë¡£ÓëiOS ÌṩµÄÆäËû³£Á¿ÖµÒ»Ñù£¬´úÂëÓ¦¸ÃʹÓÃÕë¶Ô´íÎó¶¨ÒåºÃµÄ³£Á¿Ãû¶ø²»ÊÇʵ¼ÊµÄ´íÎó´úÂëÖµ¡£±ÈÈ磬Èç¹û¿Í»§¶ËÎÞ·¨Á¬½Óµ½Ö÷»ú£¬ÄÇô´íÎó´úÂëÊÇ1004£¬²¢ÇÒÓж¨ÒåºÃµÄ³£Á¿kCFURLErrorCannotConnectToHost¡£´úÂë¾ø²»Ó¦¸ÃÖ±½ÓÒýÓÃ1004£¬ÒòΪÕâ¸öÖµ¿ÉÄÜ»áÔÚ²Ù×÷ϵͳδÀ´µÄÐÞ¶©°æÖз¢Éú±ä»¯£»Ïà·´£¬Ó¦¸ÃʹÓÃÌṩµÄö¾ÙÃûkCFURLError¡£
ÈçÏÂÊÇʹÓÃURL ¼ÓÔØÏµÍ³´´½¨HTTP ÇëÇóµÄ´úÂëʾÀý£º
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">NSHTTPURLResponse *response=nil; NSError *error=nil; NSData *myData=[NSURLConnectionsendSynchronousRequest:request returningResponse:&response error:&error]; if (!error) { // No OS Errors, keep going in the process ... } else { // Something low level broke }</span></span> |
×¢Ò⣬NSError ¶ÔÏó±»ÉùÃ÷ΪָÏònil µÄÖ¸Õë¡£Èç¹û³öÏÖ´íÎó£¬ÄÇôNSURLConnection¶ÔÏóÖ»»áʵÀý»¯NSError
¶ÔÏó¡£URL ¼ÓÔØÏµÍ³ÓµÓÐNSError ¶ÔÏó£»Èç¹ûÉÔºó´úÂë»áÓõ½Ëü£¬ÄÇôӦ¸Ã±£³ÖÕâ¸ö¶ÔÏó¡£Èç¹ûÔÚͬ²½ÇëÇóÍê³ÉºóNSError
Ö¸ÕëÒÀȻָÏònil£¬ÄǾÍ˵Ã÷ûÓвúÉúµ×²ãµÄOS ´íÎó¡£Õâʱ£¬´úÂë¾ÍÖªµÀûÓвúÉúOS ¼¶±ðµÄ´íÎ󣬲»¹ý´íÎó¿ÉÄܳöÏÖÔÚÐÒéÕ»µÄij¸ö¸ß²ã¡£
Èç¹ûÓ¦Óô´½¨µÄÊÇÒì²½ÇëÇó£¬ÄÇôNSError ¶ÔÏó¾Í»á·µ»Øµ½Î¯ÍÐÀàµÄÏÂÃæÕâ¸ö·½·¨£º
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error</span></span> |
ÕâÊÇ´«µÝ¸øÇëÇóίÍеÄ×îÖÕÏûÏ¢£¬Î¯ÍбØÐëÄÜʶ±ð³ö´íÎóµÄÔÒò²¢×÷³öÇ¡µ±µÄ·´Ó¦¡£ÔÚÈçÏÂʾÀýÖУ¬Î¯ÍлáÏòÓû§Õ¹UIAlertView£º
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">- (void) connection:conndidFailWithError:error { UIAlertView *alert = [UIAlertViewalloc] initWithTitle:@"Network Error" message:[error description] delegate:self cancelButtonTitle:@"Oh Well" otherButtonTitles:nil]; [alert show]; [alert release]; }</span></span> |
ÉÏÊö´úÂëÒÔÒ»ÖÖÉúÓ²ÇÒ²»ÓѺõķ½Ê½½«´íÎóÕ¹ÏÖ¸øÁËÓû§¡£ÔÚiOS ÈË»ú½çÃæÖ¸ÄÏ(HiG)ÖУ¬Apple
½¨Òé²»Òª¹ý¶ÈʹÓÃUIAlertViews£¬ÒòΪÕâ»áÆÆ»µÉ豸µÄʹÓøÐÊÜ¡£5.3 ½Ú¡°ÓÅÑŵش¦ÀíÍøÂç´íÎó¡±ÖнéÉÜÁËÈçºÎͨ¹ýÁ¼ºÃµÄÓû§½çÃæÒÔÒ»Öָɾ»ÇÒÒ»Öµķ½Ê½´¦Àí´íÎóµÄģʽ¡£
iOS É豸ͨÐÅ´íÎóµÄÁíÒ»Ö÷ÒªÔÒò¾ÍÊÇÓÉÓÚûÓÐÍøÂçÁ¬½Ó¶øµ¼ÖÂÉ豸ÎÞ·¨·ÃÎÊÄ¿±ê·þÎñÆ÷¡£¿ÉÒÔÔÚ³¢ÊÔ·¢ÆðÍøÂçÁ¬½Óǰ¼ì²éÒ»ÏÂÍøÂç״̬£¬ÕâÑù¿ÉÒÔ±ÜÃâºÜ¶àOS
´íÎó¡£Çë¼Çס£¬ÕâЩÉ豸¿ÉÄÜ»áºÜ¿ìµØ½øÈë»òÊÇÀë¿ªÍøÂç¡£Òò´Ë£¬ÔÚÿ´Îµ÷ÓÃǰ¼ì²éÍøÂçµÄ¿É´ïÐÔÊǷdz£ºÏÇéºÏÀíµÄÊÂÇé¡£
iOS µÄSystemConfiguration ¿ò¼ÜÌṩÁ˶àÖÖ·½Ê½À´È·¶¨É豸µÄÍøÂçÁ¬½Ó״̬¡£¿ÉÒÔÔÚSCNetworkReachability
²Î¿¼ÎĵµÖÐÕÒµ½¹ØÓڵײãAPI µÄÏ꾡ÐÅÏ¢¡£Õâ¸öAPI ·Ç³£Ç¿´ó£¬²»¹ýÒ²ÓеãÒþÃØ¡£ÐҺã¬Apple ÌṩÁËÒ»¸öÃûΪReachability
µÄʾÀý³ÌÐò£¬ËüΪSCNetworkReachabilityʵÏÖÁËÒ»¸ö¼ò»¯¡¢¸ß²ã´ÎµÄ·â×°Æ÷¡£Reachability
λÓÚiOS ¿ª·¢Õß¿âÖС£
Reachability ·â×°Æ÷ÌṩÈçÏÂ4 ¸öÖ÷Òª¹¦ÄÜ£º
1.±êʶÉ豸ÊÇ·ñ¾ß±¸¿ÉÓõÄÍøÂçÁ¬½Ó
2.±êʶµ±Ç°µÄÍøÂçÁ¬½ÓÊÇ·ñ¿ÉÒÔµ½´ïij¸öÌØ¶¨µÄÖ÷»ú
3.±êʶµ±Ç°Ê¹ÓõÄÊÇÄÄÖÖÍøÂç¼¼Êõ£ºWi-Fi¡¢WWAN »¹ÊÇʲô¼¼Êõ¶¼Ã»ÓÃ
4.ÔÚÍøÂç״̬·¢Éú±ä»¯Ê±·¢³ö֪ͨҪÏëʹÓÃReachability API£¬Çë´ÓiOS
¿ª·¢Õß¿âÖÐÏÂÔØÊ¾Àý³ÌÐò£¬µØÖ·ÊÇhttp://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html£¬È»ºó½«Reachability.hÓëReachability.m
Ìí¼Óµ½Ó¦ÓõÄXcode ÏîÄ¿ÖС£´ËÍ⣬»¹ÐèÒª½«SystemConfiguration ¿ò¼ÜÌí¼Óµ½Xcode
ÏîÄ¿ÖС£½«SystemConfiguration ¿ò¼ÜÌí¼Óµ½Xcode ÏîÄ¿ÖÐÐèÒª±à¼ÏîÄ¿ÅäÖá£Í¼5-3
չʾÁ˽«SystemConfiguration ¿ò¼ÜÌíµ½Xcode ÏîÄ¿ÖÐËùÐèµÄ²½Öè¡£
(3) Ñ¡ÔñSystemConfiguration.framework

Ñ¡¶¨ºÃÏîĿĿ±êºó£¬ÕÒµ½ÉèÖÃÖеÄLinked Frameworks and
Libraries£¬µ¥»÷+°´Å¥Ìí¼Ó¿ò¼Ü£¬Õâʱ»á³öÏÖ¿ò¼ÜÑ¡Ôñ½çÃæ¡£Ñ¡ÔñSystemConfiguration
¿ò¼Ü£¬µ¥»÷add °´Å¥½«ÆäÌí¼Óµ½ÏîÄ¿ÖС£
ÈçÏ´úÂëÆ¬¶Î»á¼ì²éÊÇ·ñ´æÔÚÍøÂçÁ¬½Ó¡£²»±£Ö¤ÈκÎÌØ¶¨µÄÖ÷»ú»òIP µØÖ·ÊǿɴïµÄ£¬Ö»ÊDZêʶÊÇ·ñ´æÔÚÍøÂçÁ¬½Ó¡£
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">#import "Reachability.h" ... if([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] == NotReachable) { // handle the lack of a network }</span></span> |
ÔÚijЩÇé¿öÏ£¬Äã¿ÉÄÜÏëÒªÐÞ¸ÄijЩ¶¯×÷¡¢½ûÓÃUI ÔªËØ»òÊǵ±É豸´¦ÓÚÓÐÏÞÖÆµÄÍøÂçÖÐʱÐ޸ij¬Ê±Öµ¡£Èç¹ûÓ¦ÓÃÐèÒªÖªµÀµ±Ç°ÕýÔÚʹÓõÄÁ¬½ÓÀàÐÍ£¬ÄÇôÇëʹÓÃÈçÏ´úÂ룺
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">#import "Reachability.h" ... NetworkStatus reach = [[Reachability reachabilityForInternetConnection] currentReachabilityStatus]; if(reach == ReachableViaWWAN) { // Network Is reachable via WWAN (aka. carrier network) } else if(reach == ReachableViaWiFi) { // Network is reachable via WiFi }</span></span> |
ÖªµÀÉ豸¿É´ïÐÔ״̬µÄ±ä»¯Ò²ÊǺÜÓбØÒªµÄ£¬ÕâÑù¾Í¿ÉÒÔÖ÷¶¯ÐÞ¸ÄÓ¦ÓÃÐÐΪ¡£ÈçÏ´úÂëÆ¬¶ÎÆô¶¯¶ÔÍøÂç״̬µÄ¼à¿Ø£º
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">#import "Reachability.h" ... [[NSNotificationCenterdefaultCenter] addObserver:self selector:@selector(networkChanged:) name:kReachabilityChangedNotification object:nil]; Reachability *reachability; reachability = [[Reachability reachabilityForInternetConnection] retain]; [reachability startNotifier];</span></span> |
ÉÏÊö´úÂ뽫µ±Ç°¶ÔÏó×¢²áΪ֪ͨ¹Û²ìÕߣ¬ÃûΪkReachabilityChangedNotification¡£
NSNotificationCenter »áµ÷Óõ±Ç°¶ÔÏóµÄÃûΪnetworkChanged:µÄ·½·¨¡£µ±¿É´ïÐÔ״̬·¢Éú±ä»¯Ê±£¬¾ÍÏò¸Ã¶ÔÏó´«µÝNSNotification
¼°ÐµĿɴïÐÔ״̬¡£ÈçÏÂʾÀýչʾÁË֪ͨ¼àÌýÕߣº
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">- (void) networkChanged: (NSNotification* )notification { Reachability* reachability = [notification object]; µÚ¢ò²¿·Ö HTTP ÇëÇó£ºiOS ÍøÂ繦ÄÜ 98 if(reachability == ReachableViaWWAN) { // Network Is reachable via WWAN (a.k.a. carrier network) } else if(reachability == ReachableViaWiFi) { // Network is reachable via WiFi } else if(reachability == NotReachable) { // No Network available } }</span></span> |
¿É´ïÐÔ»¹¿ÉÒÔÈ·¶¨µ±Ç°ÍøÂçÉÏij¸öÌØ¶¨µÄÖ÷»úÊÇ·ñÊǿɴïµÄ¡£¿ÉÒÔͨ¹ý¸ÃÌØÐÔ¸ù¾ÝÓ¦ÓÃÊÇ´¦ÓÚÄÚ²¿¸ôÀëµÄÍøÂçÉÏ»¹Êǹ«¿ªµÄInternet
Éϵ÷ÕûÆóÒµÓ¦ÓõÄÐÐΪ¡£ÈçÏ´úÂëʾÀýչʾÁ˸ÃÌØÐÔ£º
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">Reachability *reach = [Reachability reachabilityWithHostName:@"www.captechconsulting.com"]; if(reachability == NotReachable) { // The target host is not reachable available }</span></span> |
Çë¼Çס£¬¸ÃÌØÐÔ¶ÔÄ¿±êÖ÷»úµÄ·ÃÎÊÓиöÀ´»Ø¡£Èç¹ûÿ¸öÇëÇó¶¼Ê¹ÓøÃÌØÐÔ£¬ÄǾͻἫ´óÔö¼ÓÓ¦ÓõÄÍøÂç¸ºÔØÓëÑÓ³Ù¡£Apple
½¨Òé²»ÒªÔÚÖ÷Ïß³ÌÉϼì²âÖ÷»úµÄ¿É´ïÐÔ£¬ÒòΪ³¢ÊÔ·ÃÎÊÖ÷»ú¿ÉÄÜ»á×èÈûÖ÷Ị̈߳¬Õâ»áµ¼ÖÂUI ±»¶³½á¡£
OS ´íÎóÊ×ÏȾͱíÃ÷ÇëÇó³öÏÖÁËÎÊÌâ¡£Ó¦Óÿª·¢ÕßÓÐʱ»áºöÂÔµôËüÃÇ£¬²»¹ýÕâÑù×öÊÇÓзçÏյġ£ÒòΪHTTP
ʹÓÃÁË·Ö²ãÍøÂ磬ÕâʱHTTP ²ã»òÊÇÓ¦Óòã¿ÉÄÜ»á³öÏÖÆäËûÀàÐ͵ÄDZÔÚʧ°ÜÇé¿ö¡£
5.1.2 HTTP ´íÎó
HTTP ´íÎóÊÇÓÉHTTP ÇëÇó¡¢HTTP ·þÎñÆ÷»òÓ¦Ó÷þÎñÆ÷µÄÎÊÌâÔì³ÉµÄ¡£HTTP
´íÎóͨ¹ýHTTP ÏìÓ¦µÄ״̬Âë·¢Ë͸øÇëÇó¿Í»§¶Ë¡£
404 ״̬Êdz£¼ûµÄÒ»ÖÖHTTP ´íÎ󣬱íʾÕÒ²»µ½URL Ö¸¶¨µÄ×ÊÔ´¡£ÏÂÊö´úÂëÆ¬¶ÎÖеÄHTTP
Í·¾ÍÊǵ±HTTP ·þÎñÆ÷ÕÒ²»µ½ÇëÇó×ÊԴʱ¸ø³öµÄÔʼÊä³ö£º
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">HTTP/1.1 404 Not Found Date: Sat, 04 Feb 2012 18:32:25 GMT Server: Apache/2.2.14 (Ubuntu) Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 248 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1</span></span> |
ÏìÓ¦µÄµÚÒ»ÐÐÓÐ״̬Âë¡£HTTP ÏìÓ¦¿ÉÒÔ´øÓÐÏûÏ¢Ì壬ÆäÖаüº¬ÓѺá¢Óû§¿É¶ÁµÄÐÅÏ¢£¬ÓÃÓÚÃèÊö·¢ÉúµÄÊÂÇé¡£Äã²»Ó¦¸Ã½«ÊÇ·ñÓÐÏìÓ¦Ìå×÷ΪÅжÏHTTP
ÇëÇó³É¹¦Óë·ñµÄ±êÖ¾¡£
Ò»¹²ÓÐ5 ÀàHTTP ´íÎó£º
1.ÐÅÏ¢ÐÔÖʵÄ100 ¼¶±ð¡ª¡ªÀ´×ÔÓÚHTTP ·þÎñÆ÷µÄÐÅÏ¢£¬±íʾÇëÇóµÄ´¦Àí½«»á¼ÌÐø£¬²»¹ý´øÓо¯¸æ¡£
2.³É¹¦µÄ200 ¼¶±ð¡ª¡ª·þÎñÆ÷´¦ÀíÁËÇëÇó¡£Ã¿¸ö200 ¼¶±ðµÄ״̬¶¼±íʾ³É¹¦ÇëÇóµÄ²»Í¬½á¹û¡£±ÈÈ磬204
±íʾÇëÇó³É¹¦£¬²»¹ýûÓÐÏò¿Í»§¶Ë·µ»Ø¸ºÔØ¡£
3.ÖØ¶¨ÏòÐèÒªµÄ300 ¼¶±ð¡ª¡ª±íʾ¿Í»§¶Ë±ØÐëÖ´ÐÐij¸ö¶¯×÷²ÅÄܼÌÐøÇëÇó£¬ÒòΪËùÐèµÄ×ÊÔ´ÒÑ¾ÒÆ¶¯ÁË¡£URL
¼ÓÔØÏµÍ³µÄͬ²½ÇëÇó·½·¨»á×Ô¶¯´¦ÀíÖØ¶¨Ïò¶øÎÞÐë֪ͨ´úÂë¡£Èç¹ûÓ¦ÓÃÐèÒª¶ÔÖØ¶¨Ïò½øÐÐ×Ô¶¨Òå´¦Àí£¬ÄÇôӦ¸ÃʹÓÃÒì²½ÇëÇó¡£
4.¿Í»§¶Ë´íÎó400 ¼¶±ð¡ª¡ª±íʾ¿Í»§¶Ë·¢³öÁË·þÎñÆ÷ÎÞ·¨ÕýÈ·´¦ÀíµÄ´íÎóÊý¾Ý¡£±ÈÈ磬δ֪µÄURL
»òÊDz»ÕýÈ·µÄHTTP Í·»áµ¼ÖÂÕâ¸ö·¶Î§ÄڵĴíÎó¡£
5.ÏÂÓδíÎó500 ¼¶±ð¡ª¡ª±íʾHTTP ·þÎñÆ÷ÓëÏÂÓÎÓ¦Ó÷þÎñÆ÷Ö®¼ä³öÏÖÁË´íÎó¡£±ÈÈ磬Èç¹ûWeb
·þÎñÆ÷µ÷ÓÃÁËJavaEE Ó¦Ó÷þÎñÆ÷£¬Servlet ³öÏÖÁËNullPointerException£¬ÄÇô¿Í»§¶Ë¾Í»áÊÕµ½500
¼¶±ðµÄ´íÎó¡£
iOS ÖеÄURL ¼ÓÔØÏµÍ³»á´¦ÀíHTTP Í·µÄ½âÎö£¬²¢¿ÉÒÔÇáËÉ»ñÈ¡µ½HTTP
״̬¡£Èç¹û´úÂëͨ¹ýHTTP »òHTTPS URL ·¢³öÁËͬ²½µ÷Óã¬ÄÇô·µ»ØµÄÏìÓ¦¶ÔÏó¾ÍÊÇÒ»¸öNSHTTPURLResponse
ʵÀý¡£NSHTTPURLResponse ¶ÔÏóµÄstatusCode ÊôÐԻ᷵»ØÊýÖµÐÎʽµÄÇëÇóµÄHTTP
״̬¡£ÈçÏ´úÂëÑÝʾÁ˶ÔNSError ¶ÔÏóÒÔ¼°´ÓHTTP ·þÎñÆ÷·µ»ØµÄ³É¹¦×´Ì¬µÄÑéÖ¤£º
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">NSHTTPURLResponse *response=nil; NSError *error=nil; NSData *myData = [NSURLConnectionsendSynchronousRequest:request returningResponse:&response error:&error]; //Check the return if((!error) && ([response statusCode] == 200)) { // looks like things worked } else { // things broke, again. }</span></span> |
Èç¹ûÇëÇóµÄURL²»ÊÇHTTP£¬ÄÇôӦÓþÍÓ¦¸ÃÑéÖ¤ÏìÓ¦¶ÔÏóÊÇ·ñÊÇNSHTTPURLResponse¶ÔÏó¡£ÑéÖ¤¶ÔÏóÀàÐ͵ÄÊ×Ñ¡·½·¨ÊÇʹÓ÷µ»Ø¶ÔÏóµÄisKindOfClass:·½·¨£¬ÈçÏÂËùʾ£º
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">if([response isKindOfClass:[NSHTTPURLResponse class]]) { // It is a HTTP response, so we can check the status code ...</span></span> |
ÒªÏëÁË½â¹ØÓÚHTTP ״̬ÂëµÄȨÍþÐÅÏ¢£¬Çë²Î¿¼W3 RFC 2616£¬ÍøÖ·ÊÇhttp://www.w3.org/Protocols/rfc2616/rfc2616.html¡£
5.1.3 Ó¦ÓôíÎó
±¾½Ú½«»á½éÉÜÍøÂçÐÒéÕ»µÄÏÂÒ»²ã(Ó¦Óòã)²úÉúµÄ´íÎó¡£Ó¦ÓôíÎó²»Í¬ÓÚOS
´íÎó»òHTTP ´íÎó£¬ÒòΪ²¢Ã»ÓÐÕë¶ÔÕâЩ´íÎóµÄ±ê×¼Öµ»òÊÇÔÒòµÄ¼¯ºÏ¡£ÕâЩ´íÎóÊÇÓÉÔËÐÐÔÚ·þÎñ²ãÖ®ÉϵÄÒµÎñÂß¼ºÍÓ¦ÓÃÔì³ÉµÄ¡£ÔÚijЩÇé¿öÏ£¬´íÎó¿ÉÄÜÊÇ´úÂëÎÊÌ⣬±ÈÈçÒì³££¬²»¹ýÔÚÆäËûһЩÇé¿öÏ£¬´íÎó¿ÉÄÜÊÇÓïÒå´íÎ󣬱ÈÈçÏò·þÎñÌṩÁËÎÞЧµÄÕ˺ŵȡ£¶ÔÓÚǰÕßÀ´Ëµ£¬½¨ÒéÉú³ÉHTTP
500 ¼¶±ðµÄ´íÎó£»¶ÔÓÚºóÕßÀ´Ëµ£¬Ó¦¸ÃÔÚÓ¦ÓøºÔØÖзµ»Ø´íÎóÂë¡£
±ÈÈ磬Èç¹ûÓû§³¢ÊÔ´ÓÕË»§ÖÐתÕ˵Ľð¶î³¬³öÁËÕË»§µÄ¿ÉÓÃÓà¶î£¬ÄÇôÊÖ»úÒøÐоÍÓ¦¸Ã±¨¸æÓ¦ÓôíÎó¡£Èç¹û·¢³öÁËÕâÑùµÄÇëÇó£¬ÄÇôOS
»á˵ÇëÇó³É¹¦·¢ËͲ¢½ÓÊÕµ½ÁËÏìÓ¦¡£HTTP ·þÎñÆ÷»á±¨¸æ½ÓÊÕµ½ÁËÇëÇó²¢·¢³öÁËÏìÓ¦£¬²»¹ýÓ¦ÓÃ²ã±ØÐ뱨¸æÕâ±Ê½»Ò×ʧ°Ü¡£±¨¸æÓ¦ÓôíÎóµÄ×î¼Ñʵ¼ùÊǽ«Ó¦ÓõĸºÔØÊý¾Ý·â×°ÔÚ±ê×¼ÐÅ·âÖУ¬ÐÅ·âÖк¬ÓÐÒ»ÖµÄÓ¦ÓôíÎóλÖÃÐÅÏ¢¡£ÔÚÉÏÊö×ʽðתÕËʾÀýÖУ¬³É¹¦µÄתÕËÏìÓ¦µÄÒµÎñ¸ºÔØÓ¦¸ÃÈçÏÂËùʾ£º
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">{ "transferResponse":{ "fromAccount":1, "toAccount":5, "amount":500.00, "confirmation":232348844 } }</span></span> |
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;"> </span></span> |
ÏìÓ¦°üº¬ÁËÔ´Õ˺ÅÓëÄ¿±êÕ˺š¢×ªÕ˵Ä×ʽðÊý¶î¼°È·ÈϺš£Ö±½Ó½«´íÎóÂëÓë´íÎóÏûÏ¢·Åµ½transferResponse
¶ÔÏóÖлᵼÖ´íÎóÂëÓë´íÎóÏûÏ¢µÄ¶¨Î»±äµÃÀ§ÄÑ¡£Èç¹ûÿ¸ö¶¯×÷¶¼½«´íÎóÐÅÏ¢·Åµ½×Ô¼ºµÄÏìÓ¦¶ÔÏóÖУ¬¾ÍÎÞ·¨ÔÚÓ¦ÓüäÖØÓôíÎ󱨸æÂß¼ÁË¡£Ê¹ÓÃÈçÏ´úÂëÖеÄÊý¾Ý°ü½á¹¹¿ÉÒÔÈÃÓ¦ÓÿìËÙÈ·¶¨ÊÇ·ñ³öÏÖÁË´íÎ󣬷½Ê½ÊǼì²éÏìÓ¦µÄJSON¸ºÔØÖÐÊÇ·ñ´æÔÚ¡°error¡±¶ÔÏó£º
<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">{"error":{ "code":900005, "messages":"Insufficient Funds to Complete Transfer" }, "data":{ "fromAccount":1, "toAccount":5, "amount":500.00 } }</span></span> |
|