




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Socket是應用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是 一個門面模式,它把復雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓 Socket去組織數(shù)據(jù),以符合指定的協(xié)議。一個生活中的場景。你要打電話給一個朋友,先撥號,朋友聽到電話鈴聲后提起電話,這時你和你的朋友就 建立起了連接,就可以講話了。等交流結束,掛斷電話結束此次交談。 先從服務器端說起。1服務器端先初始化Socket,然后與端口綁定(bind),對端口進行監(jiān)聽(listen),調 用accept阻塞,等待客戶端連接。2在這時如果有個客戶端初始
2、化一個Socket,然后連接服務器(connect),3如果 連接成功,這時客戶端與服務器端的連接就建立了??蛻舳税l(fā)送數(shù)據(jù)請求,服務器端接收請求并處理請求,然后連接成功,這時客戶端與服務器端的連接就建立了??蛻舳税l(fā)送數(shù)據(jù)請求,服務器端接收請求并處理請求,然后arc=send(fd,szText,cnt,0);把回應數(shù)據(jù)發(fā)送給客戶端,客戶端讀取數(shù)據(jù),最后關閉連接,一次交互結束。在客戶端輸入服務器端的IP地址和發(fā)送的數(shù)據(jù),然后按發(fā)送按鈕,服務器端接收到數(shù)據(jù),然后回應客戶端。 客戶端讀取回應的數(shù)據(jù),顯示在界面上。在服務器端,主要是啟動Socket和監(jiān)聽線程。服務器端一直在監(jiān)聽是否有客戶端連接,如有連
3、接,處理客戶端的請求,給出回應,然后繼續(xù)監(jiān)聽??蛻舳?蘋果iso開發(fā): socket tcp/ip 的通訊使用方法如下: 1、創(chuàng)建工程。 2、把AsyncSocket添加到項目中。 3、添加CFNetwork.framework到工程中。 4、實現(xiàn)測試類: #import #import AsyncSocket.h interface iphone_socketViewController : UIViewController AsyncSocket *asyncSocket; endIOS socket基于tcp/udp的通信 分類: ios開發(fā) 2013-12-03 15:10 1399人
4、閱讀 評論(0) 收藏 舉報 ios通信socket蘋果網(wǎng)絡上已經(jīng)有編寫好的開源類庫GCDAsyncSocket 和GCDAsyncUdpSocket這是GCD版的比AsyncSocket 和AsyncUdpSocket估計要好用點 用法也很簡單,跟http很類似只要指定服務器的ip和端口 然后再實現(xiàn)各種回調就行,原生態(tài)實現(xiàn)正在摸索。socket 默認情況下就是采用TCP協(xié)議,創(chuàng)建之后通信雙方的socket會一直保持連接,除非手動close或因為網(wǎng)絡原因close,所以,此種狀況對服務器而 言是有一定資源消耗的,這種模式只適應與對服務器小規(guī)模的訪問,特別是對于實時性很高的應用,如視頻直播、呼叫
5、系統(tǒng)等,而http一般都是短連接的,一次 請求完之后客戶端便會于服務端端開連接http是凌駕于socket之上的高級協(xié)議,而socket是比較底層的通訊方式,只是建立了一個連接通道,具體上面?zhèn)鬏斒裁礃拥臄?shù)據(jù),按照什么格式傳輸,需要你自己定義,所以這就需要重新編寫定義服務端與客戶端的所應遵循的規(guī)定,而http已經(jīng)被前人們定義使用過了先去github的網(wǎng)站下載最新的包,然后先看看介紹。寫的比較詳細了網(wǎng)上很多都是老版本的帖子。官方已經(jīng)推出了GCDAsyncSocket來代替以前老的AsyncSocket。我的項目是no-ARC的,這個框架只有arc的版本。所以引入GCDAsyncSocket的.h和
6、.m文件后,修改xcode中項目的屬性。1)targets中“buildsettings”中找到CompilerforccObjectivec的選項。改為AppleLLVMcompiler3.0只要是3.0或以上就可以2)在“buildphases”中“compilesources”中找到GCDAsyncSocket.m,增加參數(shù)-fobj-arc3)引入GCDAsyncSocket所需要的框架,CFNetwork和security這兩個通訊http,TCP/IP與socket之間的區(qū)別1、TCP/IP連接 手機能夠使用聯(lián)網(wǎng)功能是因為手機底層實現(xiàn)了TCP/IP協(xié)議,可以使手機終端通過無線網(wǎng)絡建
7、立TCP連接。TCP協(xié)議可以對上層網(wǎng)絡提供接口,使上層網(wǎng)絡數(shù)據(jù)的傳輸建立在“無差別”的網(wǎng)絡之上。建立起一個TCP連接需要經(jīng)過“三次握手”:第一次握手:客戶端發(fā)送syn包(syn=j)到服務器,并進入SYN_SEND狀態(tài),等待服務器確認;第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態(tài);第三次握手:客戶端收到服務器的SYNACK包,向服務器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務器進入ESTABLISHED狀態(tài),完成三次握手。握手過程中傳送的包里不包含數(shù)據(jù)
8、,三次握手完畢后,客戶端與服務器才正式開始傳送數(shù)據(jù)。理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP連接都將被一直保持下去。斷開連接時服務器和客戶端均可以主動發(fā)起斷開TCP連接的請求,斷開過程需要經(jīng)過“四次握手”(過程就不細寫了,就是服務器和客戶端交互,最終確定斷開).2、HTTP連接HTTP協(xié)議即超文本傳送協(xié)議(HypertextTransferProtocol),是Web聯(lián)網(wǎng)的基礎,也是手機聯(lián)網(wǎng)常用的協(xié)議之一,HTTP協(xié)議是建立在TCP協(xié)議之上的一種應用。HTTP連接最顯著的特點是客戶端發(fā)送的每次請求都需要服務器回送響應,在請求結束后,會主動釋放連接。從建立連
9、接到關閉連接的過程稱為“一次連接”。3.1套接字(socket)概念套接字(socket)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡通信的基本操作單元。它是網(wǎng)絡通信過程中端點的抽象表示,包含進行網(wǎng)絡通信必須的五種信息:連接使用的協(xié)議,本地主機的IP地址,本地進程的協(xié)議端口,遠地主機的IP地址,遠地進程的協(xié)議端口。3.2建立socket連接建立Socket連接至少需要一對套接字,其中一個運行于客戶端,稱為ClientSocket,另一個運行于服務器端,稱為ServerSocket。套接字之間的連接過程分為三個步驟:服務器監(jiān)聽,客戶端請求,連接確認。服務器監(jiān)聽:服務器端套接字并不定位具體的客戶端套
10、接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡狀態(tài),等待客戶端的連接請求??蛻舳苏埱螅褐缚蛻舳说奶捉幼痔岢鲞B接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求。連接確認:當服務器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發(fā)給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而服務器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。4、SOCKET連接與TCP/IP連接創(chuàng)建Socket連接時,可以
11、指定使用的傳輸層協(xié)議,Socket可以支持不同的傳輸層協(xié)議(TCP或UDP),當使用TCP協(xié)議進行連接時,該Socket連接就是一個TCP連接。5、Socket連接與HTTP連接很多情況下,需要服務器端主動向客戶端推送數(shù)據(jù),保持客戶端與服務器數(shù)據(jù)的實時與同步。此時若雙方建立的是Socket連接,服務器就可以直接將數(shù)據(jù)傳送給客戶端;若雙方建立的是HTTP連接,則服務器需要等到客戶端發(fā)送一次請求后才能將數(shù)據(jù)傳回給客戶端,因此,客戶端定時向服務器端發(fā)送連接請求,不僅可以保持在線,同時也是在“詢問”服務器是否有新的數(shù)據(jù),如果有就將數(shù)據(jù)傳給客戶端。http協(xié)議是應用層的協(xié)義一個是發(fā)動機(Socket),
12、提供了網(wǎng)絡通信的能力一個是轎車(Http),提供了具體的方式兩個計算機之間的交流無非是兩個端口之間的數(shù)據(jù)通信,具體的數(shù)據(jù)會以什么樣的形式展現(xiàn)是以不同的應用層協(xié)議來定義的如HTTPFTP.socket是對端口通信開發(fā)的工具,它要更底層一些 .get和post這是http協(xié)議的兩種方法,另外還有head,delete等這兩種方法有本質的區(qū)別,get只有一個流,參數(shù)附加在url后,大小個數(shù)有嚴格限制且只能是字符串。post的參數(shù)是通過另外的流傳遞的,不通過url,所以可以很大,也可以傳遞二進制數(shù)據(jù),如文件的上傳。在servlet開發(fā)中,TCP/IP、Http、Socket的區(qū)別通過初步的了解,我知道
13、IP協(xié)議對應于網(wǎng)絡層,TCP協(xié)議對應于傳輸層,而HTTP協(xié)議對應于應用層,”而我們平時說的最多的socket是什么呢,實際上socket是對TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個調用接口(API)。通過Socket,我們才能使用TCP/IP協(xié)議。實際上,Socket跟TCP/IP協(xié)議沒有必然的聯(lián)系。Socket編程接口在設計的時候,就希望也能適應其他的網(wǎng)絡協(xié)議。所以說,Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已,是對TCP/IP協(xié)議的抽象,從而形成了我們知道的一些最基本的函數(shù)接口,比如create、listen、connect、accept、sen
14、d、read和write等等。網(wǎng)絡有一段關于socket和TCP/IP協(xié)議關系的說法比較容易理解:“TCP/IP只是一個協(xié)議棧,就像操作系統(tǒng)的運行機制一樣,必須要具體實現(xiàn),同時還要提供對外的操作接口。CSDN上有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示數(shù)據(jù)的具體形式;Socket是發(fā)動機,提供了網(wǎng)絡通信的能力。實際上,傳輸層的TCP是基于網(wǎng)絡層的IP協(xié)議的,而應用層的HTTP協(xié)議又是基于傳輸層的TCP協(xié)議的,而Socket本身不算是協(xié)議,就像上面所說,它只是提供了一個針對TCP或套接字之間的連接過程分為三個步驟:服務器監(jiān)聽,客戶端請求,連接確認。1、服務器監(jiān)聽:服務器端套接字并不定
15、位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡狀態(tài),等待客戶端的連接請求。2、客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求。3、連接確認:當服務器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發(fā)給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而服務器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。三、HTTP鏈接的特點HTTP協(xié)議即超文本
16、傳送協(xié)議(Hypertext Transfer Protocol ),是Web聯(lián)四、TCP和UDP的區(qū)別(考得最多??毂豢紶€了我覺得- -)1、TCP是面向鏈接的,雖然說網(wǎng)絡的不安全不穩(wěn)定特性決定了多少次握手都不能保證連接的可靠性,但TCP的三次握手在最低限度上(實際上也很大程度上保證了)保證了連接的可靠性;而UDP不是面向連接的,UDP傳送數(shù)據(jù)前并不與對方建立連接,對接收到的數(shù)據(jù)也不發(fā)送確認信號,發(fā)送端不知道數(shù)據(jù)是否會正確接收,當然也不用重發(fā),所以說UDP是無連接的、不可靠的一種數(shù)據(jù)傳輸協(xié)議。2、也正由于1所說的特點,使得UDP的開銷更小數(shù)據(jù)傳輸速率更高,因為不必進行收發(fā)數(shù)據(jù)的確認,所以UD
17、P的實時性更好。知道了TCP和UDP的區(qū)別,就不難理解為何采用TCP傳輸協(xié)議的MSN比采用UDP的QQ傳輸文件慢了,但并不能說QQ的通信是不安全的,因為程序員可以手動對UDP的數(shù)據(jù)收發(fā)進行驗證,比如發(fā)送方對每個數(shù)據(jù)包進行編號然后由接收方進行驗證啊什么的,即使是這樣,UDP因為在底層協(xié)議的封裝上沒有采用類似TCP的“三次握手”而實現(xiàn)了TCP所無法達到的傳輸效率。iOS應用是非常注重用戶體驗的,不光是要求界面設計合理美觀,也要求各種UI的反應靈敏,我相信大家對那種一拖就卡卡卡的 TableView 應用沒什么好印象。還記得12306么,那個速度,相信大家都受不了。為了提高 iOS 的運行速度,下面
18、我將拋磚引玉介紹一些我實踐過的用來提供iOS程序運行效率的方法,與大家分享,希望能得到更多的反饋和建議。1,計算代碼運行時間:相信數(shù)據(jù),不要太相信感覺。2,善用性能分析工具。4 不要使用太多的Xib xib編譯速度慢,有個將xib轉化為代碼的過程5. 對于 TableView,重用 cell;減少 cell 初始化的工作量,延遲裝載;6. 在線程中使用 autoreleasepool。7,將一些不太重要的任務放在 idle 時運行。8,不要在 viewWillAppear 中做費時的操作。9,使用多線程來延遲加載資源。占位,異步,主線程10 利用 cache 空間換時間。cache 是一種常見
19、的空間換時間的提供性能的收到,可以用在相當多的場合。iOS6,7的時間1.按照傳統(tǒng) 新版IOS會隨著新版IOS設備一起出現(xiàn),也就是下個月發(fā)布的全新iphone,但是在6月蘋果召開大會的時候已經(jīng)放出了ios6的bate版,如果你有開發(fā)者賬號,便可以更新到最新的測試版,如果沒有下個月也勢必可以等到正式版IOS6iOS6新特性 每次ios大版本的更新,都會帶來一些新的東西,對開發(fā)者來說,有利有弊。 好處是,新增了很多新的屬性,控件和api,開發(fā)者權限更大了,可以輕松實現(xiàn)更多的功能。弊端在于,可能廢除了一些舊的api接口,需要做更多的適配和兼 容。通過自己開發(fā)過程中的一些經(jīng)驗,查閱ios6 SDK以及
20、參考網(wǎng)上一些文檔。 總結了下面這些關于ios6系統(tǒng)的新特性,方便大家在后續(xù)開發(fā)過程中進行對比參考。一 關于內存警告 ios6中廢除了viewDidUnload,viewWillUnload這兩個系統(tǒng)回調, 收到內存警告時在didReceiveMemoryWarning中進行相關的處理。二 關于屏幕旋轉 同樣ios6 廢除了shouldAutorotateToInterfaceOrientation這個旋轉屏幕的設置接口。 必須在兩個新接口中設置旋轉屬性:shouldAutorotatesupportedInterfaceOrientations收到旋轉事件后的處理,同樣在willRotateT
21、oInterfaceOrientation,和didRotateFromInterfaceOrientation中進行。三 UISwitch ios6下,新增了以下幾個屬性,可以設置開關的顏色以及背景圖property ( nonatomic , retain ) UIColor*tintColor; property ( nonatomic , retain ) UIColor*thumbTintColor; property ( nonatomic , retain ) UIImage*onImage; property ( nonatomic , retain )UIImage *off
22、Image; 四 UINavigationBar ios6新增了,設置陰影圖片的屬性property ( nonatomic , retain ) UIImage*shadowImage; 五 UIImage 可以在ios6下設置圖片的scale比例尺寸了+ (UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale;- ( id )initWithData:(NSData *)data scale:(CGFloat)scale; 六 UIRefreshControl 之前蘋果官方是沒有現(xiàn)成的下拉刷新的控件,都是自己實現(xiàn)或者使用比較
23、成熟的開源庫。 這次,ios6 蘋果加入了UIRefreshControl,配合UITableView直接實現(xiàn)下拉刷新。但是為了保證兼容性, 還是不推薦目前使用這個控件。七UICollectionView 全新的集合控件, 應用場景有類似照片墻,瀑布流等。Github里之前已經(jīng)有很多開源庫實現(xiàn)了這個控件的功能。iOS7新特性全新UI設計 iOS7最大的變化莫過于UI設計,也許你會說UI設計“這是設計師大大們應該關注的事情,不關開發(fā)者的事,我們只需要替換圖片就行了”。那你就錯了。 UI的變化必然帶來使用習慣和方式的轉變,如何運用iOS7的UI,如何是自己的應用更切合新的系統(tǒng),都是需要考慮的事情。另外值得注意的是,使用 iOS7 SDK(現(xiàn)在只有Xcode5預覽版提供)打包的應用在iOS7上運行時將會自動使用iOS7的新界面,所以原有應用可能需要對新界面進
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江蘇揚州人才集團下屬企業(yè)招聘6人筆試備考試題及參考答案詳解一套
- 2025江蘇揚州大學附屬醫(yī)院招聘20人筆試參考題庫附答案解析含答案詳解
- 2025邯鄲武安市選聘農村黨務(村務)工作者180名筆試備考試題及參考答案詳解一套
- 2022年河北邯鄲叢臺區(qū)招聘社區(qū)工作者100人備考題庫及1套完整答案詳解
- 2025年年部編版語文四年級下冊第三次月考測試題附答案(共兩套)
- 河北省黃岡市黃梅縣育才高級中學2024-2025學年高一下學期5月月考生物試卷(有答案)
- 江西省宜春市2024-2025學年高二下學期開學考試物理試題(解析版)
- 中式快餐的美食魔法
- 2025年工業(yè)互聯(lián)網(wǎng)平臺數(shù)據(jù)清洗算法在智能能源領域的應用對比分析報告
- 疼痛管理 有效緩解患者疼痛的方法
- 貸款后管理與客戶滿意度提升
- 五下音樂測試題及答案
- 考評員考試題及答案
- 2025時政試題及答案(100題)
- 新22J01 工程做法圖集
- 超星爾雅學習通《大學生創(chuàng)業(yè)基礎》章節(jié)測試含答案
- 第四節(jié)-酸堿平衡失常的診治課件
- 國家學生體質健康標準登記卡高中樣表
- 通用焊接工藝規(guī)范
- 服裝制衣廠常用縫紉機衣車中英文對照表單針平車NEEDLE
- 中考英語完成對話專項練習
評論
0/150
提交評論