news 2026/3/23 19:12:14

Socket 编程客户端篇:Connect 连接与数据发送实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Socket 编程客户端篇:Connect 连接与数据发送实战

一、 客户端的核心动作:Connect

在 TCP 握手过程中,服务器是被动打开(Passive Open),而客户端是主动打开(Active Open)。发起这个“主动”动作的函数就是connect

1. 函数原型

intconnect(intsockfd,conststructsockaddr*addr,socklen_taddrlen);
  • sockfd:客户端自己创建的套接字。
  • addr重点!这里填的是对方(服务器)的 IP 和端口
  • addrlen:地址结构体的大小。

2. 隐式绑定 (Implicit Binding)

你可能会问:服务器需要 bind 固定端口,客户端需要吗?

  • 不需要。客户端通常不关心自己用什么端口(只要能连上服务器就行)。
  • 机制:当你调用connect时,内核会自动为客户端分配一个临时的、未被占用的端口(例如 54321)。这就是隐式绑定。

3. 三次握手

connect函数被调用时,客户端的协议栈会正式向服务器发送SYN 包,发起 TCP 三次握手。

  • 返回 0:握手成功,连接建立。
  • 返回 -1:握手失败(如服务器没开,返回ECONNREFUSED)。

二、 发送数据:Write vs Send

连接建立后,客户端就可以通过sockfd向服务器发送数据了。

1. 函数对比

  • write(fd, buf, len)
    • 通用文件 IO 函数。
    • 用法简单,适合大多数场景。
  • send(fd, buf, len, flags)
    • Socket 专用函数。
    • 多了一个flags参数。如果flags为 0,等同于write

2. 发送原理(再次强调内核缓冲区)

调用writesend时,数据并不是立即飞到了网线上。

  • 步骤 1:程序把数据从用户态内存拷贝到内核的写缓冲区
  • 步骤 2:内核的 TCP 协议栈负责在合适的时机,把写缓冲区的数据打包发给对方。
  • 意义write返回成功,只代表“数据成功交给了内核”,不代表对方一定收到了。

3. 关于字符串的小细节

发送字符串 “Hello” 时,len该填多少?

  • strlen("Hello")= 5:发送Hello
  • sizeof("Hello")= 6:发送Hello\0

建议:通常文本协议不需要发送\0,接收端根据读取长度处理即可。但如果双方约定以\0结尾,则需要发送长度+1。


三、 代码实战:编写一个 TCP 客户端

下面的代码实现了一个完整的客户端,它会连接本地的 8888 端口,发

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/16 0:24:56

【深度学习】YOLO 进阶提升之源码解读

想要深入 YOLO 模型的底层实现,通过源码解读实现进阶提升,本次解读以Ultralytics YOLOv8(当前主流、开源规范、易扩展)为核心,从「源码整体架构、核心模块、训练 / 推理流程、关键细节」四个维度展开,帮助你…

作者头像 李华
网站建设 2026/3/13 23:18:40

百考通AI开题报告功能:智能生成专业开题框架,让研究方向清晰落地

开题报告是学术研究的“导航图”,它不仅需要明确“研究什么”,更要回答“为什么研究”“怎么研究”以及“有何价值”。然而,许多学生在撰写时常常陷入困境:选题太大难以聚焦、文献堆砌缺乏逻辑、方法描述模糊不清……这些问题不仅…

作者头像 李华
网站建设 2026/3/20 9:23:38

vue餐厅点餐系统

餐厅点餐 目录 基于springboot vue餐厅点餐系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue餐厅点餐系统 一、前言 博主介绍:✌️大…

作者头像 李华
网站建设 2026/3/21 12:59:38

在可控 AI 逻辑下,做 AI 量化高质量因子实战(3)

—— 当失败条件先行之后,哪些因子还“配得上”被立项一、一旦失败条件前置,因子世界会发生一次塌缩在前两篇中,我们已经完成了两件不可逆的事:否定了“未经裁决就进入回测调参”的黑工厂范式确立了一个硬约束:失败条件…

作者头像 李华