1.socket是什么
socket又稱套接字,網(wǎng)絡(luò)上的請求就是通過socket來建立連接然后互相傳輸信息;而網(wǎng)絡(luò)上的兩個程序之間的通信是通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,即這個連接的任意一端稱為一個socket。通常應(yīng)用程序也是通過socket向網(wǎng)絡(luò)發(fā)請求或者網(wǎng)絡(luò)應(yīng)答。
2.應(yīng)用程序網(wǎng)絡(luò)通信的基礎(chǔ)
網(wǎng)絡(luò)由下往上分為:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層和應(yīng)用層。
a.ip地址(網(wǎng)絡(luò)層)
上網(wǎng)設(shè)備的唯一標(biāo)識符(即網(wǎng)絡(luò)上的通信地址,就像身份證上的家庭地址)
b.端口號
用于同一臺上網(wǎng)設(shè)備中標(biāo)識不同程序?qū)?yīng)進(jìn)程的邏輯地址;注意:有效端口:0~65535,其中0~1024由系統(tǒng)使用或者保留端口,開發(fā)中建議使用1024以上的端口;如:mysql數(shù)據(jù)庫常用的3307等。
c.傳輸協(xié)議(傳輸層)
傳輸協(xié)議顧名思義就是用什么樣的方式進(jìn)行信息交互,即通信的規(guī)則;常見協(xié)議:TCP,UDP
TCP(傳輸控制協(xié)議)
建立連接,形成傳輸數(shù)據(jù)的通道
在連接中進(jìn)行大數(shù)據(jù)傳輸(數(shù)據(jù)不受限制)
通過三次握手完成連接,是可靠協(xié)議,安全送達(dá)
必須建立連接,效率會稍低
TCP連接的三次握手
1.第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
2.第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài);
3.第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
UDP(用戶數(shù)據(jù)報協(xié)議)
將數(shù)據(jù)及源和目的封裝成數(shù)據(jù)包中,不需要建立連接
每個數(shù)據(jù)報的大小限制在64K之內(nèi)
因為無需連接,因此是不可靠協(xié)議
不需要建立連接,速度快
D.數(shù)據(jù)以什么格式傳輸(表示層和應(yīng)用層)
常用應(yīng)用層協(xié)議有:HTTP,XMPP等
3.socket的應(yīng)用

代碼(應(yīng)用CocoaAsyncSocket框架):
Dome1(模擬取款機(jī)):https://github.com/tangbinbinM/socket-
Dome2(模擬微信正在輸入狀態(tài)):https://github.com/tangbinbinM/socket-2