C++ TCP客户端和服务器核心是调用系统socket API,Windows需WSAStartup初始化,类Unix直接socket();服务器流程为bind→listen→accept,客户端为socket→connect→send/recv;需注意字节序、错误处理及消息边界处理。
用 C++ 写 TCP 客户端和服务器,核心是调用系统提供的 socket API(Windows 用 Winsock,Linux/
mac
OS 用 Berkeley socket),配合标准 C++ 处理数据和逻辑。不依赖第三方库也能完成,但要注意平台差异和错误处理。
初始化与创建 socket
Windows 需先调用
WSAStartup
初始化网络库;类 Unix 系统直接调用
socket()
即可。
Windows:传入版本号(如 MAKEWORD(2,2)),成功后才能用 socket 相关函数
Linux/macOS:直接
,失败返回 -1
统一建议:检查返回值,出错时用
errno
(Unix)或
WSAGetLastError()
(Windows)获取原因
服务器:绑定、监听、接受连接
服务端流程固定:bind → listen → accept。关键在设置地址结构体
sockaddr_in
。
清零结构体:
指定协议族:
转主机
字节
序为网络字节序:
监听任意 IP:
后记得
返回新 socket 描述符,专用于和该客户端通信
客户端:连接服务器并收发数据
客户端只需
socket → connect → send/recv
。连接前也要填好
sockaddr_in
,但需指定服务器 IP 和端口。
Trae win
Trae Windows 官方版本现已全面支持 Win10 和 Win11 系统(64位)。国内开发者可直接访问 Trae 中文官网(trae.cn 或 trae.com.cn),一键下载官方正版 .exe 安装包,享受国内直连的高速稳定体验。安装过程极其简便,双击即可运行,并支持一键无缝导入 VS Code 或 Cursor 的原有主题、快捷键及插件配置。登录支持手机号、微信或稀土掘金账号。内置免费的豆包与 DeepSeek 等顶级大模型,让你开箱即用,轻松开启高效的 AI 智能编程之旅。
下载
立即学习
“
C++免费学习笔记(深入)
”;
IP 可用
或更安全的
成功才表示连上
发送用
,接收用
注意
返回值:0 表示对方关闭连接,-1 表示出错,>0 才是实际收到字节数
收发字符串与简单协议
TCP 是字节流,没有消息边界。想收发“一条消息”,得自己加规则,比如:
以
结尾:发送方每次写完加换行,接收方循环读直到遇到
头部带长度:先发 4 字节整数表示后续内容长度,再发正文(注意大小端,推荐网络字节序)
C++ 中可用
存缓冲区,
前用
和
,接收后手动拼接
别直接把
对象传给
—— 它内部结构不可直接传输
基本上就这些。跨平台时封装一层小工具类(比如 Socket、TcpServer、TcpClient)能显著提升可读性和复用性。不复杂但容易忽略错误检查和字节序,写完多测几次连接断开、空输入、超长数据等边界情况。
int sockfd = socket(AF_INET, SOCK_STREAM, 0);memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(8080);addr.sin_addr.s_addr = INADDR_ANY;bind(sockfd, (struct sockaddr*)&addr, sizeof(addr))listen(sockfd, SOMAXCONN)accept()inet_addr("127.0.0.1")inet_pton()connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr))send(sockfd, buf, len, 0)recv(sockfd, buf, sizeof(buf)-1, 0)recv\n\nstd::stringsend().c_str().length()std::stringsend