http协议与服务器通信,iPhone应用用HTTP协议和服务器通信
iPhone應用用HTTP協議和服務器通信是本文要介紹的內容,主要是來學習iphone應用中的通信協議,具體內容來看本文詳解。
iPhone用http協議和服務器通信有兩種方式,一種是同步一種是異步的,所謂同步是指當客戶端調用post/get的方式的函數向服務器發出數據請求后,該函數不會直接返回,只有得到服務器響應或者請求時間timeout之后才會返回繼續執行其它任務。異步采用回調的方式,即請求發送后,函數會立即返回,一旦服務器聯結成功操作系統會去觸發相應的回調進行相應的處理。這和window的消息處理機制一樣。
同步一般用于一次性操作,如判斷當前網絡是否可用等等。多的就不再一一介紹,在實現上面有兩點不同:
(1)在用NSURLConnect的時候一個調用同步函數一個調用了異步函數。
(2)異步的需要實現delegate的相關回調函數。
以下是參考代碼:
同步方式:
-(void)UpadaPost:(NSString?*)strcontext?URL:(NSString?*)urlstr{
NSLog(urlstr);
NSLog(strcontext);
assert(strcontext?!=?NULL);
assert(urlstr?!=?NULL);
NSData*postData=[strcontextdataUsingEncoding:NSASCIIStringEncoding??allowLossyConversion:YES];
NSString?*postLength=?[NSString?stringWithFormat:@"%d",?[postData?length]];
NSMutableURLRequest?*request=?[[[NSMutableURLRequest?alloc]?init]?autorelease];
[request?setURL:[NSURL?URLWithString:urlstr]];
[request?setHTTPMethod:@"POST"];?[request?setTimeoutInterval:?20];//setting?timeout
[request?setValue:postLength?forHTTPHeaderField:@"Content-Length"];
[request?setValue:@"application/x-www-form-urlencoded"?forHTTPHeaderField:@"Content-Type"];
[request?setHTTPBody:postData];
NSURLResponse?*respone;
NSError?*error;
NSData*myReturn=[NSURLConnection??sendSynchronousRequest:request?returningResponse:&respone
error:error];
NSLog(@"%@",?[[NSString?alloc]?initWithData:myReturn?encoding:NSUTF8StringEncoding]);
}
異步方式:
-(void)UpadaPost:(NSString?*)strcontext?URL:(NSString?*)urlstr{
NSLog(urlstr);
NSLog(strcontext);
assert(strcontext?!=?NULL);
assert(urlstr?!=?NULL);
NSData?*postData=?[strcontext?dataUsingEncoding:NSASCIIStringEncoding??allowLossyConversion:YES];
NSString?*postLength=?[NSString?stringWithFormat:@"%d",?[postData?length]];
NSMutableURLRequest?*request=?[[[NSMutableURLRequest?alloc]?init]?autorelease];
[request?setURL:[NSURL?URLWithString:urlstr]];
[request?setHTTPMethod:@"POST"];?[request?setTimeoutInterval:?20];//setting?timeout
[request?setValue:postLength?forHTTPHeaderField:@"Content-Length"];
[request?setValue:@"application/x-www-form-urlencoded"??forHTTPHeaderField:@"Content-Type"];
[request?setHTTPBody:postData];
NSURLConnection?*conn=[[NSURLConnection?alloc]?initWithRequest:request??delegate:self];
if?(conn)
{
NSLog(@"Connection?success");
[UIApplication?sharedApplication].networkActivityIndicatorVisible=YES;
[conn?retain];
}
else
{
//?inform?the?user?that?the?download?could?not?be?made
}
}
#pargma?mark
以下為相應的回調函數
//?收到響應時,?會觸發
-?(void)connection:(NSURLConnection?*)connection???didReceiveResponse:(NSURLResponse?*)response??{
//?注意這里將NSURLResponse對象轉換成NSHTTPURLResponse對象才能去
NSHTTPURLResponse?*httpResponse=?(NSHTTPURLResponse*)response;
if?([response?respondsToSelector:@selector(allHeaderFields)])?{
NSDictionary?*dictionary=?[httpResponse?allHeaderFields];
NSLog([dictionary?description]);
NSLog(@"%d",[response?statusCode]);
}
}
//鏈接錯誤
-?(void)connection:(NSURLConnection?*)connection?didFailWithError:(NSError?*)error?{
//[self?performSelectorOnMainThread:@selector(httpConnectEnd)?withObject:nil??waitUntilDone:NO];
NSLog(@"%@",[error?localizedDescription]);
}
//?Called?when?a?chunk?of?data?has?been?downloaded.
//接收數據?每收到一次數據,?會調用一次
-?(void)connection:(NSURLConnection?*)connection?didReceiveData:(NSData?*)data?{
//?Process?the?downloaded?chunk?of?data.
NSLog(@"%d",?[data?length]);
//NSLog(@"%@",?[[NSString?alloc]?initWithData:data?encoding:NSUTF8StringEncoding]);
//[self?performSelectorOnMainThread:@selector(updateProgress)?withObject:nil??waitUntilDone:NO];
}
//接收結束
-?(void)connectionDidFinishLoading:(NSURLConnection?*)connection?{
NSLog(@"%@",connection);
//NSLog(@"%lld",?received_);
//[self?performSelectorOnMainThread:@selector(httpConnectEnd)?withObject:nil??waitUntilDone:NO];
//?Set?the?condition?which?ends?the?run?loop.
}
小結:iPhone應用用HTTP協議和服務器通信的內容介紹完了,希望通過本文的學習能對你有所幫助!
【編輯推薦】
【責任編輯:李程站 TEL:(010)68476606】
點贊 0
總結
以上是生活随笔為你收集整理的http协议与服务器通信,iPhone应用用HTTP协议和服务器通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hphmon06.exe是什么进程 作用
- 下一篇: c语言程序位置式pid算法,增量式与位置