news 2026/4/18 19:31:45

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/28 1:31:56

springboot旅游管理系统(11704)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/4/14 8:25:09

校园实验室管理系统

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

作者头像 李华
网站建设 2026/4/11 1:42:46

基于springboot + vue校园外卖系统

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

作者头像 李华
网站建设 2026/4/11 0:17:36

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

—— 当失败被制度化之后,人类在系统中还剩下什么职责一、这是因子实战的终点,也是系统工程的起点走到第三篇,其实“因子实战”已经被结构性耗尽了。不是因为没东西可写, 而是因为一旦你完成了以下三件事:否定未经裁决…

作者头像 李华
网站建设 2026/4/18 19:14:54

救命神器10个一键生成论文工具,助本科生轻松搞定毕业论文!

救命神器10个一键生成论文工具,助本科生轻松搞定毕业论文! AI 工具正在重塑论文写作的未来 随着人工智能技术的不断进步,越来越多的本科生开始借助 AI 工具来提升论文写作的效率和质量。尤其是在面对高 AIGC 率、语义不通顺等常见问题时&…

作者头像 李华