Socket:又稱套接字,底層要建立連接通道,通過套接字建立連接,向網(wǎng)絡(luò)發(fā)出應(yīng)答或請求
套接字(socket)是通信的基石者蠕,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過程中端點的抽象表示,包含進行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議杠愧,本地主機的IP地址究抓,本地進程的協(xié)議端口,遠地主機的IP地址,遠地進程的協(xié)議端口畅卓。
網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個socket,建立socket連接至少需要一對套接字,一個運行于客戶端( ClientSocket),另一個運行于服務(wù)器端(ServerSocket).
- web應(yīng)用程序,提供HTTP服務(wù),端口80,HTTP底層就是通過socket建立連接通信管道,實現(xiàn)數(shù)據(jù)傳輸,HTTP是一個TCP的傳輸協(xié)議(方式),一個安全可靠的協(xié)議
- 數(shù)據(jù)庫應(yīng)用程序(MySQL是移動服務(wù)端的數(shù)據(jù)庫應(yīng)用程序,端口3306)
網(wǎng)絡(luò)通信要素:
- ** IP地址:**尋找主機
- 端口號:沒有就找不到程序,默認為80,標示進程的邏輯地址(一個應(yīng)用程序就是一個進程),有效端口(065535,實際不止這些,01024由系統(tǒng)使用保留,開發(fā)中建議使用1024以上的端口)
傳輸協(xié)議(用什么方式進行交互):
- TCP:傳輸控制協(xié)議
- 建立連接(即建立的管道),
- 建立之后數(shù)據(jù)傳輸大小不收限制
- 通過3次握手完成連接,目的是為數(shù)據(jù)的安全可靠
- 每次都要進行連接,效率稍低(在通信雙方中任何一方主動關(guān)閉,連接之前,TCP連接都將被一直保持下去)
- UDP:用戶數(shù)據(jù)報協(xié)議
- 不需建立連接(eg:廣播),將數(shù)據(jù)及源和目的封裝成數(shù)據(jù)包
- 不可靠,出現(xiàn)問題,不會有之前的數(shù)據(jù)
- 數(shù)據(jù)大小有限制(64kb之內(nèi)),避免中間出現(xiàn)誤差,大量數(shù)據(jù)丟失
- 速度快
socket通信流程:(需要客戶端,服務(wù)器端)
服務(wù)端將socket,--->bind(端口,來標示當前應(yīng)用程序),--->監(jiān)聽端口(客戶端請求連接[同時連接大量客戶端連接,會造成連接阻塞])--->accept(客戶端請求[建立連接])--->客戶端發(fā)請求(write)--->服務(wù)器端read--->處理請求后回應(yīng)數(shù)據(jù)(write操作)--->客戶端read數(shù)據(jù)--->客戶端結(jié)束連接---服務(wù)器接收斷開
實現(xiàn)socket服務(wù)端監(jiān)聽
- C語言實現(xiàn)
- CocoeAsyncSocket(第三方框架)