news 2026/5/7 6:11:49

TCP 通信全流程:服务器与客户端

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TCP 通信全流程:服务器与客户端

一、 通信流程总览:像“打电话”一样简单

我们可以把 TCP 通信比作一次传统的电话服务:

  • 服务器(接线员)

    1. 装个电话机 (socket)。
    2. 申请一个固定电话号码 (bind)。
    3. 把电话线插好,确保能听到铃声 (listen)。
    4. 电话响了,接起来 (accept)。
    5. 开始聊天 (read/write)。
    6. 挂断 (close)。
  • 客户端(拨打者)

    1. 装个电话机 (socket)。
    2. 不需要申请固定号码(系统自动分配临时号码)。
    3. 拨打服务器的电话号码 (connect)。
    4. 开始聊天 (read/write)。
    5. 挂断 (close)。

二、 流程深度对比

1. 服务器端:六步走(重在“等”)

服务器的核心任务是等待。它有两个关键的文件描述符:

  • 监听描述符 (lfd):仅用于检测有没有人打电话进来。
  • 通信描述符 (cfd):当电话接通后,产生一个新的 fd 专门用来通话。

流程

  1. socket(): 创建监听 fd。
  2. bind(): 绑定本地 IP+端口(必须做,否则客户端找不到)。
  3. listen(): 开启监听模式。
  4. accept():阻塞等待,直到连接建立,返回 cfd。
  5. read/write(): 使用 cfd 通信。
  6. close(): 关闭 cfd(结束通话)或 lfd(关停服务)。

2. 客户端:四步走(重在“连”)

客户端的核心任务是发起。它只需要一个文件描述符。

流程

  1. socket(): 创建通信 fd。
  2. connect(): 主动连接服务器的 IP+端口。
    • 注:这里替代了服务器端的 bind+listen+accept 复杂过程。
  3. read/write(): 数据收发。
  4. close(): 关闭 fd。

三、 代码实战:完整的问候系统

我们来实现一个简单的业务:客户端发送自己的名字,服务器回复 “Hello, [名字]”。

1. 服务器端代码 (server.c)

#include<stdio.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>intmain(){// 1. 创建监听套接字intlfd=socket(AF_INET,SOCK_STREAM,0);// 2. 绑定地址structsockaddr_inaddr;addr.sin_family=AF_IN
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 11:21:04

揭秘 Socket 缓冲区与数据封装

一、 两个“替身”:监听与通信描述符的内核差异 虽然 lfd (监听) 和 cfd (通信) 都是文件描述符,它们在内核里对应的缓冲区功能却大相径庭。 1. 监听描述符 (Listening FD) 读缓冲区:用来存“人”的。当有客户端发起连接(完成三次握手)时,内核会把这个连接请求放进读缓…

作者头像 李华
网站建设 2026/5/3 4:41:24

零样本分类标签设计:如何定义有效类别?

零样本分类标签设计&#xff1a;如何定义有效类别&#xff1f; 1. 引言&#xff1a;AI 万能分类器的兴起与挑战 随着自然语言处理技术的不断演进&#xff0c;传统文本分类方法依赖大量标注数据进行模型训练的模式正逐渐被更灵活、高效的方案所替代。在这一背景下&#xff0c;…

作者头像 李华
网站建设 2026/5/5 3:57:59

零样本分类技术解析:StructBERT的预训练优势

零样本分类技术解析&#xff1a;StructBERT的预训练优势 1. 引言&#xff1a;AI 万能分类器的时代来临 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;文本分类一直是核心任务之一。传统方法依赖大量标注数据进行监督学习&#xff0c;但在实际业务中&#xff0c…

作者头像 李华
网站建设 2026/5/2 23:12:45

ResNet18部署案例:教育场景中的物体识别应用

ResNet18部署案例&#xff1a;教育场景中的物体识别应用 1. 引言&#xff1a;通用物体识别在教育场景的价值 随着人工智能技术的普及&#xff0c;通用物体识别正逐步融入教育信息化体系。从智能教学辅助到学生自主探究项目&#xff0c;图像分类能力为课堂带来了全新的互动方式…

作者头像 李华
网站建设 2026/5/6 4:24:53

Mod Engine 2终极指南:5分钟打造专属魂类游戏世界

Mod Engine 2终极指南&#xff1a;5分钟打造专属魂类游戏世界 【免费下载链接】ModEngine2 Runtime injection library for modding Souls games. WIP 项目地址: https://gitcode.com/gh_mirrors/mo/ModEngine2 还在为游戏体验单一而烦恼吗&#xff1f;想要在《艾尔登法…

作者头像 李华
网站建设 2026/5/4 13:23:23

DIY Layout Creator:高效电路设计工具完全指南

DIY Layout Creator&#xff1a;高效电路设计工具完全指南 【免费下载链接】diy-layout-creator multi platform circuit layout and schematic drawing tool 项目地址: https://gitcode.com/gh_mirrors/di/diy-layout-creator 还在为复杂的电路设计软件而头疼吗&#x…

作者头像 李华