)
hello~ 很高兴见到大家! 这次带来的是Linux网络中关于网络基础这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢?个 人 主 页: 默|笙文章目录一、Echo Server1.1 理解 TCP 函数1. listen2. accept3. read 与 write4. connect代码tcp回响代码一、Echo Server1.1 理解 TCP 函数1. listenTCP 与 UDP 的通信机制不同。TCP 是面向连接的协议通信前需要建立稳定连接UDP 是无连接协议好比邮寄快递、发送邮件发送方发出数据即可不需要接收方同时在线。而 TCP 如同打电话通信双方必须同时在线并成功建立连接后才能交互数据。因此 TCP 与 UDP 服务端使用的系统调用函数存在差异。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始终只负责监听新连接永远不参与具体的数据通信工作。accept 不是只取特定的一个新连接如果当前这个取出失败了不要直接退出程序而是continue让accept去取下一个。3. read 与 write因为其实套接字也是一种文件从网络中读写数据用read 和write其实就足够了虽然tcp也有专门的读写函数但其实与read和write这两个接口相差不大。4. connect客户端发起 TCP 连接请求向服务端发送 SYN尝试建立 TCP 三次握手。connect 函数第一个参数是客户端通过 socket 创建得到的套接字文件描述符第二个、第三个参数为输入型参数用于存放目标服务端的地址信息。函数返回值连接成功返回 0连接失败返回 - 1错误信息会存入全局变量 errno。连接成功后后续客户端就可以通过 sockfd 进行读写网络数据了。剩下的看一遍 gitee 上的代码三个版本多进程多线程进程池。