日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

http协议与服务器通信,iPhone应用用HTTP协议和服务器通信

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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协议和服务器通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。