iOS Socket介紹及其簡單應用

socket,究竟是什么東東,面試時,筆試有他,面試也有他,如果做智能硬件,肯定會用到socket,所以,今天帶大家回顧一下socket;一、介紹:Socket:是應?層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是 一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接?后面;例:你要打電話給?個朋友,先撥號,朋友聽到電話鈴聲后提起電話,這時你和你的朋友就建立起了連接,就可以講話了。等交流結束,掛斷電話結束此次交談。建立連接步驟:先從服務器端說起。1>服務器端先初始化Socket,然后與端?綁定(bind),對端?進?監聽(listen),調用accept阻塞,等待客戶端連接。2>在這時如果有個客戶端初始化?個Socket,然后連接服務器(connect);3>如果連接成功,這時客戶端與服務器端的連接就建?了。客戶端發送數據請求,服務器端接收請求并處理請求,然后連接成功,這時客戶端與服務器端的連接就建立了。客戶端發送數據請求,服務器端接收請求并處理請求,然后arc=send(fd,szText,cnt,0);把回應數據發送給客戶端,客戶端讀取數據,最后關閉連接,?次交互結束。簡而言之,在客戶端輸?服務器端的IP地址和發送的數據,然后按發送按鈕,服務器端接收到數據,然后回應客戶端。客戶端讀取回應的數據,顯?示在界?面上。在服務器端,主要是啟動Socket和監聽線程。服務器端?一直在監聽是否有客戶端連接,如有連接,處理客戶端的請求,給出回應,然后繼續監聽。客戶端:蘋果iso開發: socket tcp/ip 的通訊,使用方法如下:創建工程。把AsyncSocket添加到項目中。添加CFNetwork.framework到工程中;實現測試類:#import#import"AsyncSocket.h"

@interfaceiphone_socketViewController : UIViewController {

AsyncSocket *asyncSocket; }

@end

二、應用:IOS socket基于tcp/udp的通信

ios通信socket蘋果

網絡上已經有編寫好的開源類庫GCDAsyncSocket和GCDAsyncUdpSocket ,這是GCD版的? 比AsyncSocket和AsyncUdpSocket估計要好用點,用法也很簡單,跟http很類似 ,只要指定服務器的ip和端口然后再實現各種回調就行,原生態實現正在摸索。。。。。socket默認情況下就是采用TCP協議,創建之后通信雙方的socket會一直保持連接,除非手動close或因為網絡原因close,所以,此種狀況對服務器而言是有一定資源消耗的,這種模式只適應與對服務器小規模的訪問,特別是對于實時性很高的應用,如視頻直播、呼叫系統等,而http一般都是短連接的,一次請求完之后客戶端便會于服務端端開連接。http是凌駕于socket之上的高級協議,而socket是比較底層的通訊方式,只是建立了一個連接通道,具體上面傳輸什么樣的數據,按照什么格式傳輸,需要你自己定義,所以這就需要重新編寫定義服務端與客戶端的所應遵循的規定,而http已經被前人們定義使用過了

先去github的網站下載最新的包,然后先看看介紹。寫的比較詳細了點擊從gitut下載socketDemo,網上很多都是老版本的帖子。官方已經推出了GCDAsyncSocket來代替以前老的AsyncSocket。我的項目是no-ARC的,這個框架只有arc的版本。所以引入GCDAsyncSocket的.h和.m文件后,修改xcode中項目的屬性,

步驟如下:

targets中“build settings”中找到Compiler for c/c++/Objective-c的選項。改為Apple LLVM compiler 3.0 只要是3.0或以上就可以;

在“build phases”中“compile sources”中找到GCDAsyncSocket.m,增加參數-fobj-arc;

引入GCDAsyncSocket所需要的框架,CFNetwork和security這兩個框架;

三、通訊http,TCP/IP與socket之間的區別:

1、TCP/IP連接

手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網絡建立TCP連接。TCP協議可以對上層網絡提供接口,使上層網絡數據的傳輸建立在“無差別”的網絡之上。建立起一個TCP連接需要經過“三次握手”:

第一次握手:客戶端發送syn包(syn=j)到服務器,并進入SYN_SEND狀態,等待服務器確認;

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。斷開連接時服務器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過“四次握手”(過程就不細寫了,就是服務器和客戶端交互,最終確定斷開).

2、HTTP連接

HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。

HTTP連接最顯著的特點是客戶端發送的每次請求都需要服務器回送響應,在請求結束后,會主動釋放連接。從建立連接到關閉連接的過程稱為“一次連接”。

3.1套接字(socket)概念

套接字(socket)是通信的基石,是支持TCP/IP協議的網絡通信的基本操作單元。它是網絡通信過程中端點的抽象表示,包含進行網絡通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議端口,遠地主機的IP地址,遠地進程的協議端口。

3.2 建立socket連接

建立Socket連接至少需要一對套接字,其中一個運行于客戶端,稱為ClientSocket ,另一個運行于服務器端,稱為ServerSocket 。

套接字之間的連接過程分為三個步驟:服務器監聽,客戶端請求,連接確認。

服務器監聽:服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態,實時監控網絡狀態,等待客戶端的連接請求。

客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求。

連接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而服務器端套接字繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求。

4、SOCKET連接與TCP/IP連接

創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接。

5、Socket連接與HTTP連接

很多情況下,需要服務器端主動向客戶端推送數據,保持客戶端與服務器數據的實時與同步。此時若雙方建立的是Socket連接,服務器就可以直接將數據傳送給客戶端;若雙方建立的是HTTP連接,則服務器需要等到客戶端發送一次請求后才能將數據傳回給客戶端,因此,客戶端定時向服務器端發送連接請求,不僅可以保持在線,同時也是在“詢問”服務器是否有新的數據,如果有就將數據傳給客戶端。

6、http協議是應用層的協義:

一個是發動機(Socket),提供了網絡通信的能力 ,一個是轎車(Http),提供了具體的方式 ;兩個計算機之間的交流無非是兩個端口之間的數據通信,具體的數據會以什么樣的形式展現`是以不同的應用層協議來定義的`如HTTP`FTP`... socket是對端口通信開發的工具,它要更底層一些 .

7、網絡請求方式:get和post這是http協議的兩種方法,另外還有head, delete等這兩種方法有本質的區別,get只有一個流,參數附加在url后,大小個數有嚴格限制且只能是字符串。post的參數是通過另外的流傳遞的,不通過url,所以可以很大,也可以傳遞二進制數據,如文件的上傳。在servlet開發中,

補充說明:TCP/IP、Http、Socket的區別

通過初步的了解,知道IP協議對應于網絡層,TCP協議對應于傳輸層,而HTTP協議對應于應用層,而我們平時說的最多的socket是什么呢,實際上socket是對TCP/IP協議的封裝,Socket本身并不是協議,而是一個調用接口(API)。通過Socket,我們才能使用TCP/IP協議。實際上,Socket跟TCP/IP協議沒有必然的聯系。Socket編程接口在設計的時候,就希望也能適應其他的網絡協議。所以說,Socket的出現只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道的一些最基本的函數接口,比如create、listen、connect、accept、send、read和write等等。網絡有一段關于socket和TCP/IP協議關系的說法比較容易理解:“TCP/IP只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外的操作接口。實際上,傳輸層的TCP是基于網絡層的IP協議的,而應用層的HTTP協議又是基于傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或套接字之間的連接過程分為三個步驟:服務器監聽,客戶端請求,連接確認。

服務器監聽:服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態,實時監控網絡狀態,等待客戶端的連接請求。

客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求。

連接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。

而服務器端套接字繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求。

三、HTTP鏈接的特點

HTTP協議即超文本傳送協議(HypertextTransfer Protocol ),是Web聯

四、TCP和UDP的區別(考得最多。。快被考爛了我覺得- -\\)

1、TCP是面向鏈接的,雖然說網絡的不安全不穩定特性決定了多少次握手都不能保證連接的可靠性,但TCP的三次握手在最低限度上(實際上也很大程度上保證了)保證了連接的可靠性;

而UDP不是面向連接的,UDP傳送數據前并不與對方建立連接,對接收到的數據也不發送確認信號,發送端不知道數據是否會正確接收,當然也不用重發,所以說UDP是無連接的、不可靠的一種數據傳輸協議。

2、也正由于1所說的特點,使得UDP的開銷更小數據傳輸速率更高,因為不必進行收發數據的確認,所以UDP的實時性更好。知道了TCP和UDP的區別,就不難理解為何采用TCP傳輸協議的MSN比采用UDP的QQ傳輸文件慢了,但并不能說QQ的通信是不安全的,因為程序員可以手動對UDP的數據收發進行驗證,比如發送方對每個數據包進行編號然后由接收方進行驗證啊什么的,即使是這樣,UDP因為在底層協議的封裝上沒有采用類似TCP的“三次握手”而實現了TCP所無法達到的傳輸效率。

如果轉載請注明轉于:AirZilong的博客

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375

推薦閱讀更多精彩內容

  • 一、網絡各個協議:TCP/IP、SOCKET、HTTP等 網絡七層由下往上分別為物理層、數據鏈路層、網絡層、傳輸層...
    杯水救車薪閱讀 2,278評論 0 17
  • 第一部分、概念的理解1、什么是Socket?Socket又稱之為“套接字”,是系統提供的用于網絡通信的方法。它的實...
    Hevin_Chen閱讀 2,470評論 0 5
  • 參考:http://www.2cto.com/net/201611/569006.html TCP HTTP UD...
    F麥子閱讀 2,968評論 0 14
  • 網絡由下往上分為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。通過初步的了解,我知道IP協議對應于網...
    黑馬飲清泉閱讀 1,496評論 0 6
  • 從北京回來后,見了方倩,方倩變了,變得不哪么愛打扮,但她更熱愛生活,每天過去很充實了。 天星為方倩的轉變感到高興,...
    碼字好玩兒閱讀 225評論 0 0