最近在看socket編程的一些內(nèi)容踢关,想總結(jié)下勺馆。先從理論知識總結(jié)下,不涉及代碼拗秘。
1.socket是什么圣絮?
socket(套接字)是應(yīng)用層和TCP/IP協(xié)議族通信的中間軟件抽象層,是它的一組接口雕旨。包含進(jìn)行網(wǎng)絡(luò)通訊必須的五種信息:連接使用的協(xié)議扮匠,本地主機(jī)的IP地址,本地進(jìn)程的協(xié)議端口凡涩,遠(yuǎn)地主機(jī)的IP地址棒搜,遠(yuǎn)地進(jìn)程的協(xié)議端口。
2.socket能干嘛活箕?
多個(gè)TCP連接或者多個(gè)應(yīng)用程序進(jìn)程可能需要通過同一個(gè)TCP協(xié)議端口傳輸數(shù)據(jù)力麸,為了區(qū)分不同的應(yīng)用程序進(jìn)程和連接,操作系統(tǒng)為應(yīng)用程序和TPC/IP協(xié)議交互提供了socket育韩。應(yīng)用層和傳輸層可以通過socket克蚂,區(qū)分來自不同應(yīng)用程序進(jìn)程或者網(wǎng)絡(luò)連接的通信,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)(socket并發(fā)通信座慰,比如手機(jī)直播軟件中的聊天陨舱,全局跑道等等)。
3.如何建立socket連接
建立socket連接至少需要一對套接字版仔,分別運(yùn)行于服務(wù)端和客戶端游盲,clientSocket serverSocket误墓。建立連接需要三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請求益缎,連接確認(rèn)谜慌。
socket可以支持不同的傳輸層協(xié)議(tcp或者udp),當(dāng)使用tcp協(xié)議進(jìn)行連接時(shí)莺奔,該socket連接就是一個(gè)tcp連接欣范。udp同理
4.socket心跳機(jī)制
因?yàn)榉阑饓P(guān)閉長時(shí)間處于非活躍狀態(tài)的連接而導(dǎo)致socket連接中斷,通過心跳機(jī)制可以保持長連接令哟。原理如下:
客戶端每隔一段時(shí)間向服務(wù)器端發(fā)送一個(gè)心跳包恼琼,同時(shí)開啟定時(shí)器。服務(wù)器返回一個(gè)相同的心跳包給客戶端屏富。如果客戶端能收到心跳包晴竞,說明連接正常,刪除定時(shí)器狠半。如果超時(shí)未收到心跳包噩死,則認(rèn)為連接斷開,這個(gè)時(shí)候可以進(jìn)行重連設(shè)置神年。至于如何設(shè)置重連已维,可以參考:https://blog.csdn.net/u013282507/article/details/52622264
參考:http://www.cocoachina.com/ios/20160602/16572.html
https://blog.csdn.net/u013282507/article/details/52622264