做外贸比较好的网站有哪些,北京短视频代运营,网站建的创新点,网站商品图片尺寸以下内容源于C语言中文网的学习与整理#xff0c;非原创#xff0c;如有侵权请告知删除。 总结 socket的中文翻译是“套接字”#xff0c;它是计算机之间进行通信的一种约定或一种方式。 套接字的典型应用就是web服务器和浏览器。 在Unix/Linux中#xff0c;网络连接也是一…以下内容源于C语言中文网的学习与整理非原创如有侵权请告知删除。 总结 socket的中文翻译是“套接字”它是计算机之间进行通信的一种约定或一种方式。 套接字的典型应用就是web服务器和浏览器。 在Unix/Linux中网络连接也是一个文件遵循文件I/O操作的流程。 套接字按照数据传输方式分为面向连接的套接字流格式套接字无连接的套接字数据报格式套接字。 面向连接的套接字可以保证可靠的数据传输因为它使用的是TCP协议。 无连接的套接字能够高效地传输数据但不确保数据的可靠它使用的是UDP协议。 一、socket是什么
1、socket的含义 socket 的原意是“插座”在计算机通信领域socket 被翻译为“套接字”它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定一台计算机可以接收其他计算机的数据也可以向其他计算机发送数据。 我们把插头插到插座上就能从电网获得电力供应同样为了与远程计算机进行数据传输需要连接到因特网而 socket 就是用来连接到因特网的工具。 socket 的典型应用就是 Web 服务器和浏览器浏览器获取用户输入的 URL向服务器发起请求服务器分析接收到的 URL将对应的网页内容返回给浏览器浏览器再经过解析和渲染就将文字、图片、视频等元素呈现给用户。 学习 socket也就是学习计算机之间如何通信并编写出实用的程序。 2、UNIX/Linux 中的socket 在 UNIX/Linux 系统中为了统一对各种硬件的操作简化接口不同的硬件设备也都被看成一个文件。对这些文件的操作等同于对磁盘上普通文件的操作。 你也许听很多高手说过UNIX/Linux 中的一切都是文件那个家伙说的没错。 为了表示和区分已经打开的文件UNIX/Linux 会给每个文件分配一个 ID这个 ID 就是一个整数被称为文件描述符File Descriptor。例如 通常用 0 来表示标准输入文件stdin它对应的硬件设备就是键盘通常用 1 来表示标准输出文件stdout它对应的硬件设备就是显示器。UNIX/Linux 程序在执行任何形式的 I/O 操作时都是在读取或者写入一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数它的背后可能是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示器甚至是一个网络连接。请注意网络连接也是一个文件它也有文件描述符 我们可以通过 socket() 函数来创建一个网络连接或者说打开一个网络文件socket() 的返回值就是文件描述符。有了文件描述符我们就可以使用普通的文件操作函数来传输数据了例如 用 read() 读取从远程计算机传来的数据用 write() 向远程计算机写入数据。只要用 socket() 创建了连接剩下的就是文件操作了网络编程原来就是如此简单 二、socket有哪些分类 这个世界上有很多种套接字比如 DARPA Internet 地址Internet 套接字、本地节点的路径名Unix套接字、CCITT X.25地址X.25 套接字等。其中 Internet 套接字是最具代表性的也是最经典最常用的。以后我们提及套接字指的都是 Internet 套接字。 根据数据的传输方式可以将 Internet 套接字分成两种类型面向连接的套接字、无连接的套接字。 通过 socket() 函数创建连接时必须告诉它使用哪种数据传输方式。 1、流格式套接字SOCK_STREAM 流格式套接字Stream Sockets也叫“面向连接的套接字”在代码中使用 SOCK_STREAM 表示。 SOCK_STREAM 是一种可靠的、双向的通信数据流数据可以准确无误地到达另一台计算机如果损坏或丢失可以重新发送。它有以下几个特征 数据在传输过程中不会消失数据是按照顺序传输的数据的发送和接收不是同步的有的教程也称“不存在数据边界”。可以将 SOCK_STREAM 比喻成一条传送带只要传送带本身没有问题不会断网就能保证数据不丢失同时较晚传送的数据不会先到达较早传送的数据不会晚到达这就保证了数据是按照顺序传递的。 为什么流格式套接字可以达到高质量的数据传输呢 这是因为它使用了 TCP 协议The Transmission Control Protocol传输控制协议TCP 协议会控制你的数据按照顺序到达并且没有错误。 你也许见过 TCP是因为你经常听说“TCP/IP”。TCP 用来确保数据的正确性而IPInternet Protocol网络协议用来控制数据如何从源头到达目的地即常说的“路由”。 那么“数据的发送和接收不同步”该如何理解呢 假设传送带传送的是水果接收者需要凑齐 100 个后才能装袋但是传送带可能把这 100 个水果分批传送比如第一批传送 20 个第二批传送 50 个第三批传送 30 个。接收者不需要和传送带保持同步只要根据自己的节奏来装袋即可不用管传送带传送了几批也不用每到一批就装袋一次可以等到凑够了 100 个水果再装袋。 流格式套接字的内部有一个缓冲区也就是字符数组通过 socket 传输的数据将保存到这个缓冲区。接收端在收到数据后并不一定立即读取只要数据不超过缓冲区的容量接收端有可能在缓冲区被填满以后一次性地读取也可能分成好几次读取。 也就是说不管数据分几次传送过来接收端只需要根据自己的要求读取不用非得在数据到达时立即读取。传送端有自己的节奏接收端也有自己的节奏它们是不一致的。 流格式套接字有什么实际的应用场景吗 浏览器所使用的 http 协议就基于面向连接的套接字因为必须要确保数据准确无误否则加载的 HTML 将无法解析。 2、数据报格式套接字SOCK_DGRAM 数据报格式套接字Datagram Sockets也叫“无连接的套接字”在代码中使用 SOCK_DGRAM 表示。 计算机只管传输数据不作数据校验如果数据在传输中损坏或者没有到达另一台计算机是没有办法补救的。也就是说数据错了就错了无法重传。 因为数据报套接字所做的校验工作少所以在传输效率方面比流格式套接字要高。 可以将 SOCK_DGRAM 比喻成高速移动的摩托车快递它有以下特征 强调快速传输而非传输顺序传输的数据可能丢失也可能损毁限制每次传输的数据大小数据的发送和接收是同步的有的教程也称“存在数据边界”。众所周知速度是快递行业的生命。用摩托车发往同一地点的两件包裹无需保证顺序只要以最快的速度交给客户就行。这种方式存在损坏或丢失的风险而且包裹大小有一定限制。因此想要传递大量包裹就得分配发送。