Socket一般实现的功能为 TCP客户端和服务器端 UDP客户端和服务器端 组播
Socket基于各种协议实现的功能本质上是客户机或服务器端将应用层的内容传入传输层 由传输层进行通讯
Socket实现套接字比较重要 套接字可以看作是应用层和传输层之间的通道
Sokcet通讯简单来说就是将服务绑定到本地节点 然后连接远程的节点(组)
TCP连接是一种点对点连接的可靠传输 在连接之前一定进行一次握手(发送一个不含实际数据的请求报文然后接收到返回报文 之后才会发送实际的数据) 确认连接成功之后才会传输数据 TCP第一次握手之后数据可以互相传输 也就是说A连接到B B就不需要连接到A了 他们之间的连接是全双工的 B完全可以沿着之前连接的通道发送数据 无法将数据发送到多个接收方 TCP是一种可靠的有序传输 例如发送的是ABC接收的一定是ABC 并且接收顺序一定和发送的顺序相同 例如发送2个数据包 AAA和BBB 接收的也是AAA和BBB TCP每一个节点都可以看作是服务器 但是根据约定一般把发送方称为客户端 接收方称为服务器端
UDP连接是只管发送 至于接收放是否接收不管
组播是将本地节点加入到组中 将数据发送到组中 只要节点加入到组中的客户端都会接收到数据 组播本质上也是UDP的一种 只不过是将远程节点变成了群组 类似于部门经理将一个通知告诉多个人 可以去找每个人告知 也可以将所有人叫到一起告知 这个聚到一起的地方就是组播的组 组播的地址分为内网组播地址和外网组播地址 使用时注意
网络聊天的三种模式
这种模式就是常规的点对点模式 每一个客户端都可以看作是服务器 不过这种也有一个问题 当添加一个新客户端时其他客户端如何知道新添加的这个客户端的状态和地址(套接字) 这时候一般都是使用组播进行通知
这种模式引入了服务器 服务器对每个客户端进行侦听 当有客户端上线时 服务器会将地址信息和状态进行分发 服务器只是发送和接收接入客户端的地址和状态(绿色箭头) 各个客户端之间还是相互点对点连接(黑色箭头) 因此此模式各个客户端还是需要对端口进行侦听
这种模式就是完全使用了服务器 服务器负责缓存各个客户端的地址信息和状态 以及分发数据包 每一个客户端只需要和服务器进行对话就可以 客户端不需要对端口进行侦听 侦听操作由服务器完成 状态也由服务器返回 这种模式也可以进行缓存会话信息 例如B下线了 A发送给B的消息可以暂存在服务器 等B上线再发送给B 如果两个客户端之间需要发送大文件 可以暂时搭建个连接(如图橙色箭头)发送完删掉就可以