對于TCP協(xié)議來說, SOCKET就相當(dāng)于是一個現(xiàn)實生活中的個人招待所. 首先來說個人招待所要有個位置,所以通過bind, 把這個個人招待所的位置確定好, 個人招待所的服務(wù)員也得要得到消息了才能夠上班來接待顧客, 所以要listen,??蛻衄F(xiàn)在就可connect到接待處, 任何客戶要進入, 都首先得要被個人招待所Accept, 得到一個臨時通行證, 才能夠在個人招待所里進行各種業(yè)務(wù), 而被接待后, 有什么事, 得要拿臨時通行證來識別每一個客戶, 而輪到服務(wù)某個客戶的時間, 也是通過這個臨時通行證呼叫客戶才能夠通信。
所以 TCP 的服務(wù)器, 創(chuàng)建SOCKET, bind, listen, accept, 然后再用accept回來的客戶專用臨時通行證進行交流. 客戶走的時候也必須把臨時通行證回收, 也就是關(guān)閉accept回來的socket.
由此可見TCP有用于監(jiān)聽的套接字和用于接待的的套接字,共兩個。
對于UDP協(xié)議來說, SOCKET就相當(dāng)于想是生活中的網(wǎng)絡(luò)客服, 一個網(wǎng)絡(luò)客服可以同時服務(wù)N個顧客, 只要顧客發(fā)消息過來了, 這個網(wǎng)絡(luò)客服就可以跟顧客進行聯(lián)系, 并且這個網(wǎng)絡(luò)客服可以處理很多消息, 任何顧客發(fā)消息過來,網(wǎng)絡(luò)客服都迅速的同時處理這些消息. 但是, 只要顧客不來消息聯(lián)系網(wǎng)絡(luò)客服,網(wǎng)絡(luò)客服就沒什么必要主動聯(lián)系.
UDP的服務(wù)器, 只要bind以后就可以直接等待recvfrom, 有人sendto東西過來, 就立即做事, 沒有sendto過來, 也沒什么必要做事. 雖然不排除服務(wù)器隔開一段時間后主動向客戶發(fā)送東西, 但這個客戶到底還在不在, 已經(jīng)不知道了. 所以一般服務(wù)器是懶得動的,所以udp只要知道IP地址和端口號就可以連接了,其他的不用理會。
由此可見udp只需要一個套接字就可以了。
再總結(jié)下吧,從這上面的流程看得出來了吧:
tcp有監(jiān)聽還有能接待,比較負(fù)責(zé),也就是說它的可靠性好,安全性高,但是效率要差點。
udp來說,雖然他不像tcp那么負(fù)責(zé),也就是他可靠性不高,但是有信息來他馬上就直接處理,說明他效率高。