对于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那么负责,也就是他可靠性不高,但是有信息来他马上就直接处理,说明他效率高。