☰
【Linux网络】_tcp_socket(初识)
2026/10/12 3:55:36 网站建设 项目流程

hello~ 很高兴见到大家! 这次带来的是Linux网络中关于网络基础这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢?
个 人 主 页: 默|笙


文章目录

  • 一、Echo Server
    • 1.1 理解 TCP 函数
      • 1. listen
      • 2. accept
      • 3. read 与 write
      • 4. connect

代码:tcp回响代码


一、Echo Server

1.1 理解 TCP 函数

1. listen

  1. TCP 与 UDP 的通信机制不同。TCP 是面向连接的协议,通信前需要建立稳定连接;UDP 是无连接协议,好比邮寄快递、发送邮件,发送方发出数据即可,不需要接收方同时在线。而 TCP 如同打电话,通信双方必须同时在线并成功建立连接后,才能交互数据。因此 TCP 与 UDP 服务端使用的系统调用函数存在差异。
  2. listen函数用于将 TCP 套接字设置为监听状态,backlog参数代表连接等待队列的最大长度,通常设置为 5,无需配置过大。成功设置返回0,不成功返回-1。

可以用餐厅举例理解 backlog:把服务端当作餐厅,已经入座就餐的客人代表已经建立连接、正在通信的客户端。backlog就是餐厅允许在店内等候的排队人数上限。当排队的连接请求数量达到上限,新到来的连接请求会被拒绝,避免大量请求堆积影响已建立连接的通信。

2. accept

作用:从监听套接字的等待队列里取出一个已经完成 TCP 三次握手的新连接,返回一个新的套接字描述符,专门用来和这个客户端通信。

1、accept 函数的参数规则:第一个参数必须传入已完成绑定、处于监听状态的套接字文件描述符;第二个、第三个参数为输出型参数,调用函数后会自动获取并存储客户端的 IP、端口等地址信息,若无需获取客户端地址,可传空值。
2、accept 函数返回值规则:函数调用失败时返回 -1;调用成功时,会生成并返回一个全新的套接字文件描述符。

监听套接字 与 accept 返回的通信套接字 核心区别:
我们可以用饭店服务场景直观理解:处于监听状态的原始套接字,就像饭店门口专门负责揽客的服务员A,只负责监听、接收客户端的连接请求,完成TCP三次握手,只揽客、不服务,全程固定不变,持续等待新的客户端连接。
而 accept 成功后返回的新套接字,是服务员A成功招揽到客人后,专门分配出来一对一服务当前客人的专属服务员B。后续和该客户端的数据收发、通信交互,全部由这个新套接字完成。
每接入一位新客户端,accept 就会生成一个全新的专属套接字(新服务员),各个套接字相互独立、各司其职。而原始的监听套接字(服务员A)始终只负责监听新连接,永远不参与具体的数据通信工作。

  1. accept 不是只取特定的一个新连接,如果当前这个取出失败了,不要直接退出程序,而是continue让accept去取下一个。

3. read 与 write

  1. 因为其实套接字也是一种文件,从网络中读写数据,用read 和write其实就足够了,虽然tcp也有专门的读写函数,但其实与read和write这两个接口相差不大。

4. connect

客户端发起 TCP 连接请求,向服务端发送 SYN,尝试建立 TCP 三次握手。

  1. connect 函数第一个参数,是客户端通过 socket 创建得到的套接字文件描述符;第二个、第三个参数为输入型参数,用于存放目标服务端的地址信息。
  2. 函数返回值:连接成功返回 0,连接失败返回 - 1,错误信息会存入全局变量 errno。
  3. 连接成功后,后续客户端就可以通过 sockfd 进行读写网络数据了。
  4. 剩下的看一遍 gitee 上的代码,三个版本,多进程,多线程,进程池。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询