首页 > 后端开发 > C++ > 正文

c++如何进行socket网络编程_c++ TCP客户端与服务器实现【实战】

尼克
发布: 2025-12-08 18:12:07
原创
478人浏览过
C++ TCP客户端和服务器核心是调用系统socket API,Windows需WSAStartup初始化,类Unix直接socket();服务器流程为bind→listen→accept,客户端为socket→connect→send/recv;需注意字节序、错误处理及消息边界处理。

c++如何进行socket网络编程_c++ tcp客户端与服务器实现【实战】

用 C++ 写 TCP 客户端和服务器,核心是调用系统提供的 socket API(Windows 用 Winsock,Linux/macOS 用 Berkeley socket),配合标准 C++ 处理数据和逻辑。不依赖第三方库也能完成,但要注意平台差异和错误处理。

初始化与创建 socket

Windows 需先调用 WSAStartup 初始化网络库;类 Unix 系统直接调用 socket() 即可。

  • Windows:传入版本号(如 MAKEWORD(2,2)),成功后才能用 socket 相关函数
  • Linux/macOS:直接 int sockfd = socket(AF_INET, SOCK_STREAM, 0);,失败返回 -1
  • 统一建议:检查返回值,出错时用 errno(Unix)或 WSAGetLastError()(Windows)获取原因

服务器:绑定、监听、接受连接

服务端流程固定:bind → listen → accept。关键在设置地址结构体 sockaddr_in

  • 清零结构体:memset(&addr, 0, sizeof(addr));
  • 指定协议族:addr.sin_family = AF_INET;
  • 转主机字节序为网络字节序:addr.sin_port = htons(8080);
  • 监听任意 IP:addr.sin_addr.s_addr = INADDR_ANY;
  • bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)) 后记得 listen(sockfd, SOMAXCONN)
  • accept() 返回新 socket 描述符,专用于和该客户端通信

客户端:连接服务器并收发数据

客户端只需 socket → connect → send/recv。连接前也要填好 sockaddr_in,但需指定服务器 IP 和端口

YouMind
YouMind

AI内容创作和信息整理平台

YouMind 207
查看详情 YouMind

立即学习C++免费学习笔记(深入)”;

  • IP 可用 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 返回值:0 表示对方关闭连接,-1 表示出错,>0 才是实际收到字节数

收发字符串与简单协议

TCP 是字节流,没有消息边界。想收发“一条消息”,得自己加规则,比如:

  • \n 结尾:发送方每次写完加换行,接收方循环读直到遇到 \n
  • 头部带长度:先发 4 字节整数表示后续内容长度,再发正文(注意大小端,推荐网络字节序)
  • C++ 中可用 std::string 存缓冲区,send() 前用 .c_str().length(),接收后手动拼接
  • 别直接把 std::string 对象传给 send —— 它内部结构不可直接传输

基本上就这些。跨平台时封装一层小工具类(比如 Socket、TcpServer、TcpClient)能显著提升可读性和复用性。不复杂但容易忽略错误检查和字节序,写完多测几次连接断开、空输入、超长数据等边界情况。

以上就是c++++如何进行socket网络编程_c++ TCP客户端与服务器实现【实战】的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号