新闻中心

c++如何实现TCP服务器和客户端_c++网络通信TCP编程示例

2025-11-04
浏览次数:
返回列表
C++中TCP通信通过Socket API实现,Windows使用Winsock,Linux使用POSIX接口。1. 服务器步骤:初始化、创建套接字、绑定地址、监听、接受连接、收发数据;客户端流程:初始化、创建套接字、连接服务器、发送接收数据。2. 示例代码包含条件编译支持跨平台,需链接ws2_32.lib(Windows)。3. 编译运行:Linux用g++ server.cpp -o server,Windows需链接库;先启服务器监听8080端口,再运行客户端连接。4. 注意事项:需检查send/recv返回值,实际应用应增加错误处理、多客户端支持(如多线程或select/poll),此例适用于学习基础通信流程。

c++如何实现tcp服务器和客户端_c++网络通信tcp编程示例

在C++中实现TCP服务器和客户端通信,主要依赖于操作系统的套接字(Socket)API。在Windows上使用Winsock,在Linux/Unix上使用POSIX socket接口。下面分别给出一个简单的TCP服务器和客户端示例,适用于初学者理解基本流程。

1. TCP服务器端实现(C++)

服务器的主要步骤包括:初始化套接字、绑定地址、监听连接、接受客户端连接、收发数据。

Windows 示例(需链接 ws2_32.lib):

Pippit AI Pippit AI

CapCut推出的AI创意内容生成工具

Pippit AI 133 查看详情 Pippit AI
#include <iostream>
#ifdef _WIN32
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #pragma comment(lib, "ws2_32.lib")
#else
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <unistd.h>
    #include <arpa/inet.h>
#endif

int main() {
#ifdef _WIN32
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
        std::cerr << "WSA启动失败\n";
        return 1;
    }
#endif

    // 创建套接字
    int server_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (server_fd == -1) {
        std::cerr << "套接字创建失败\n";
        return 1;
    }

    // 设置地址结构
    struct sockaddr_in address;
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(8080);

    // 绑定
    if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) == -1) {
        std::cerr << "绑定失败\n";
        return 1;
    }

    // 监听
    if (listen(server_fd, 5) == -1) {
        std::cerr << "监听失败\n";
        return 1;
    }

    std::cout << "服务器正在监听 8080 端口...\n";

    // 接受连接
    struct sockaddr_in client_addr;
    socklen_t client_len = sizeof(client_addr);
    int client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_len);
    if (client_fd == -1) {
        std::cerr << "接受连接失败\n";
        return 1;
    }

    std::cout << "客户端已连接: " << inet_ntoa(client_addr.sin_addr) << "\n";

    // 接收数据
    char buffer[1024] = {0};
    int bytes = recv(client_fd, buffer, sizeof(buffer) - 1, 0);
    if (bytes > 0) {
        std::cout << "收到: " << buffer << "\n";
        // 回传响应
        send(client_fd, "Hello from server!", 18, 0);
    }

    // 关闭连接
    close(client_fd);
    close(server_fd);

#ifdef _WIN32
    closesocket(server_fd);
    WSACleanup();
#endif

    return 0;
}

2. TCP客户端实现(C++)

客户端流程:初始化、创建套接字、连接服务器、发送/接收数据。

#include <iostream>
#ifdef _WIN32
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #pragma comment(lib, "ws2_32.lib")
#else
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <unistd.h>
    #include <arpa/inet.h>
#endif

int main() {
#ifdef _WIN32
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
        std::cerr << "WSA启动失败\n";
        return 1;
    }
#endif

    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1) {
        std::cerr << "套接字创建失败\n";
        return 1;
    }

    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(8080);
    inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);

    // 连接服务器
    if (connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
        std::cerr << "连接失败\n";
        return 1;
    }

    std::cout << "已连接到服务器\n";

    // 发送数据
    const char* msg = "Hello from client!";
    send(sock, msg, strlen(msg), 0);

    // 接收响应
    char buffer[1024] = {0};
    int bytes = recv(sock, buffer, sizeof(buffer) - 1, 0);
    if (bytes > 0) {
        std::cout << "服务器响应: " << buffer << "\n";
    }

    close(sock);

#ifdef _WIN32
    closesocket(sock);
    WSACleanup();
#endif

    return 0;
}

3. 编译与运行说明

  • Linux 编译:g++ server.cpp -o server
  • Windows 编译:使用 Visual Studio 或 g++(MinGW),确保链接 ws2_32.lib
  • 先运行服务器,再运行客户端
  • 服务器监听 127.0.0.1:8080,客户端连接该地址

4. 注意事项

  • 错误处理很重要,实际项目中应更完善
  • 支持多客户端需使用多线程或IO复用(如select/poll)
  • 跨平台代码可用宏区分Win/Linux
  • send/recv 返回值需检查,可能未一次性收发全部数据

基本上就这些。这个例子展示了最基本的TCP通信流程,适合学习网络编程基础。

以上就是c++++如何实现TCP服务器和客户端_c++网络通信TCP编程示例的详细内容,更多请关注其它相关文章!


# 多线程  # 江门网站推广技巧服务  # 小红书SEO优化逻辑  # 新媒体营销免费推广平台  # 厚街全网推广营销  # 深圳网站竞价优化怎么样  # 潍坊网站建设团队  # 关键词排名百度  # seo搜索专员招聘网站  # 营销推广的误区  # 门口营销推广文案  # 微软  # 适用于  # 网络通信  # 如何实现  # linux  # 如何使用  # 绑定  # 客户端  # 网络编程  # stream  # win  # ios  # c++  # unix  # ai  # 端口  # 操作系统  # windows  # word 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】  Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  《刺客信条:影》PS5 Pro和Switch 2画面对比  Win11网速慢怎么解决 Win11网络设置优化解除限速  win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】  2025-2030年全球乘用车销量预测:新能源成增长主力  Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  苹果手机如何防止被恶意App追踪  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  mc.js官网登录入口 mc.js官方登录入口最新版  优化Log4j2控制台输出性能:解决异步日志瓶颈  PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符  哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法  在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用  b站怎么删除评论_b站评论管理与删除操作  Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践  Python getattr() 异常处理深度解析:避免程序意外退出  纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析  Python异步编程实践:使用Binance API构建实时交易数据流  c++ 获取系统当前时间 c++时间戳获取方法  Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】  创客贴用户入口官网登录 创客贴网页版电脑版系统  fishbowl官网免费版 fishbowl养鱼网站入口  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  在React函数组件中利用原生HTML5进行邮箱地址验证  黑猫投诉统一入口官网 消费者权益保护投诉平台  Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换  在Go Martini框架中高效服务动态生成图像的实践指南  在J*a项目里如何构建对象之间的契约_接口约束的实际落地  可靠CSGO开箱平台解析 CSGO开箱网合集  响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  React中useState与局部变量:理解组件状态管理与渲染机制  QQ网页版官方账号入口 QQ网页版网页版登录指南  Golang如何安装Swagger工具_GoSwagger文档生成环境  Surface怎么安装系统 微软Surface Pro U盘重装win11教程  如何在 Windows 11 中启动游戏手柄设置  Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧  动漫花园资源网使用步骤_动漫花园资源网下载流程  Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略  J*aScript中赋值与自增运算符的复杂交互与执行机制  c++如何使用Meson构建系统_c++比CMake更快的构建工具  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】  NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  Mac怎么查看崩溃日志_Mac控制台错误报告分析  谷歌学术网站直达地址 谷歌学术搜索网页版一键进入 

搜索