????这个世界上有很多种套接字(socket)-- 如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等;Internet 套接字 是最具代表性的,也是最经典最常用的(我们日常中 提及套接字,指的都是 Internet 套接字);网络编程 肯定 离开 套接字 这个概念,本文 描述 Internet 套接字(TCP、UDP) 基础概念 相关 的基础概念
????
????DARPA Internet 地址(Internet 套接字) 常用的套接字 主要有 流式套接字、数据报式套接字、原始套接字
????
????流格式套接字(Stream Sockets)也叫 "面向连接的套接字",在代 码中使用 SOCK_STREAM 表示;SOCK_STREAM 是一种可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,重新发送
????
????SOCK_STREAM 使用了 TCP 协议(The Transmission Control Protocol,传输控制协议),TCP 协议会控制你的数据按照顺序到达并且没有错误
????发送端有自己的节奏,接收端也有自己的节奏,它们是不一致的(不管数据分几次传送过来,接收端只需要根据自己的要求读取,不用非得在数据到达时立即读取)
????
????流格式套接字的内部有一个缓冲区(也就是字符数组),通过 socket 传输的数据将保存到这个缓冲区;接收端在收到数据后并不一定立即读取,只要数据不超过缓冲区的容量,接收端有可能在缓冲区被填满以后一次性地读取,也可能分成好几次读取
????
????浏览器所使用的 http 协议就基于面向连接的套接字,因为必须要确保数据准确无误,否则加载的 HTML 将无法解析
????
????数据报格式套接字(Datagram Sockets)也叫 "无连接的套接字",在代码中使用 SOCK_DGRAM 表示;计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的(也就是说,数据错了就错了,自身无法重传)
????
????"数据的发送和接收是同步的"(接收次数应该和发送次数相同)
????
????QQ 视频聊天和语音聊天就使用 SOCK_DGRAM 来传输数据
原文:https://blog.51cto.com/11495268/2418310