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