c++ socket编程入门 c++网络通信代码实例


核心是使用socket API实现TCP通信,服务端依次创建套接字、绑定、监听、接受连接并收发数据,客户端则连接后发送消息并接收响应,需注意跨平台差异与错误处理。

c++ socket编程入门 c++网络通信代码实例

想快速上手 C++ Socket 编程?其实核心就是使用操作系统提供的 socket API,通过创建套接字、绑定地址、监听连接(服务端)或发起连接(客户端),实现网络通信。下面以 TCP 为例,给出一个简单但完整的 C++ 网络通信实例,包含服务端和客户端代码,适用于 Linux 和 Windows(稍作调整)。

服务端代码:接收客户端消息并回传

服务端负责监听指定端口,等待客户端连接,收到数据后原样返回。

Linux / macOS 版本(g++ 编译):

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};
    
    // 创建套接字
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    // 配置地址结构
    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)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }

    // 监听
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }
    std::cout << "Server listening on port 8080...\n";

    // 接受连接
    if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {
        perror("accept");
        exit(EXIT_FAILURE);
    }

    // 读取客户端消息
    read(new_socket, buffer, 1024);
    std::cout << "Client: " << buffer << "\n";

    // 回传消息
    const char *response = "Hello from server";
    send(new_socket, response, strlen(response), 0);
    std::cout << "Response sent\n";

    close(new_socket);
    close(server_fd);
    return 0;
}

Windows 版本需包含 Winsock:

#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")

int main() {
    WSADATA wsa;
    SOCKET server_fd, new_socket;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};

    if (WSAStartup(MAKEWORD(2,2), &wsa) != 0) {
        std::cerr << "WSAStartup failed\n";
        return 1;
    }

    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
        std::cerr << "Socket creation error\n";
        WSACleanup();
        return 1;
    }

    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)) == SOCKET_ERROR) {
        std::cerr << "Bind failed\n";
        closesocket(server_fd);
        WSACleanup();
        return 1;
    }

    if (listen(server_fd, 3) == SOCKET_ERROR) {
        std::cerr << "Listen failed\n";
        closesocket(server_fd);
        WSACleanup();
        return 1;
    }
    std::cout << "Server listening on port 8080...\n";

    if ((new_socket = accept(server_fd, (struct sockaddr *)&address, &addrlen)) == INVALID_SOCKET) {
        std::cerr << "Accept failed\n";
        closesocket(server_fd);
        WSACleanup();
        return 1;
    }

    recv(new_socket, buffer, 1024, 0);
    std::cout << "Client: " << buffer << "\n";

    const char *response = "Hello from server";
    send(new_socket, response, strlen(response), 0);
    std::cout << "Response sent\n";

    closesocket(new_socket);
    closesocket(server_fd);
    WSACleanup();
    return 0;
}

客户端代码:连接服务端并发送消息

客户端主动连接服务端,发送一条消息,并接收响应。

PHP 网络编程技术与实例(曹衍龙) PHP 网络编程技术与实例(曹衍龙)

PHP网络编程技术详解由浅入深,全面、系统地介绍了PHP开发技术,并提供了大量实例,供读者实战演练。另外,笔者专门为本书录制了相应的配套教学视频,以帮助读者更好地学习本书内容。这些视频和书中的实例源代码一起收录于配书光盘中。本书共分4篇。第1篇是PHP准备篇,介绍了PHP的优势、开发环境及安装;第2篇是PHP基础篇,介绍了PHP中的常量与变量、运算符与表达式、流程控制以及函数;第3篇是进阶篇,介绍

PHP 网络编程技术与实例(曹衍龙) 386 查看详情 PHP 网络编程技术与实例(曹衍龙)

Linux / macOS 客户端:

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

int main() {
    int sock = 0;
    struct sockaddr_in serv_addr;
    char *hello = "Hello from client";
    char buffer[1024] = {0};

    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        std::cerr << "Socket creation error\n";
        return -1;
    }

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(8080);

    // 将 IP 地址从文本转换为二进制
    if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
        std::cerr << "Invalid address / Address not supported\n";
        return -1;
    }

    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        std::cerr << "Connection Failed\n";
        return -1;
    }

    send(sock, hello, strlen(hello), 0);
    std::cout << "Message sent to server\n";

    read(sock, buffer, 1024);
    std::cout << "Server response: " << buffer << "\n";

    close(sock);
    return 0;
}

Windows 客户端: 同样需要初始化 Winsock,其余逻辑一致,把 socket、connect、send、recv 替换为 Windows 对应函数即可。

编译与运行(Linux 示例)

保存服务端代码为 server.cpp,客户端为 client.cpp

g++ server.cpp -o server
g++ client.cpp -o client

终端1运行服务端:
./server
终端2运行客户端:
./client

观察输出,确认通信成功。

关键点说明

  • AF_INET 表示 IPv4 协议族,SOCK_STREAM 表示 TCP 流式套接字。
  • 服务端依次调用 socket → bind → listen → accept。
  • 客户端调用 socket → connect → send/recv。
  • 注意错误检查,真实项目中不能忽略返回值。
  • 跨平台开发建议封装接口,或使用 Boost.Asio 等库简化操作。
基本上就这些,不复杂但容易忽略细节。

以上就是c++++ socket编程入门 c++网络通信代码实例的详细内容,更多请关注其它相关文章!


# 编程技术  # 宜昌seo规则  # 怎么写网站建设计划书  # 顺德网站建设学校地址  # 湖北想做网站推广的公司  # 江西seo软件批发公司  # 林海网站建设自助建站  # seo-gobi 投行  # 惠阳区网站建设  # 德州抖音seo授权平台  # 深圳短视频营销推广方法  # 如何实现  # 流媒体  # 中文网  # 绑定  # 本书  # 网络通信  # 服务端  # 客户端  # str  # win  # macos  # ios  # c++  # ai  # mac  # 端口  # 操作系统  # windows  # word  # linux 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 《深林》冬季章节图文攻略  lol小红书怎么|直播|?lol小红书|直播|是什么意思?  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  抖音猜你想搜能说明对方搜过吗  J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析  虫虫漫画排行榜单入口_虫虫漫画编辑推荐入口  2025考研成绩查询时间入口分享  抖音火山版如何进行提现  CSS布局中意外顶部空白的调试与解决:深入理解padding-top  支付宝网页版在线入口 支付宝官网电脑登录入口  《新三国志曹操传》游历事件袁尚突围攻略  动漫岛在线动漫网 动漫岛动漫在线观看官方入口  被称为海蜈蚣的海洋动物是  圆通快递包裹轨迹查询 圆通速递快件实时位置跟踪  圆通快递官网入口查询单号 手机版官方查询入口  《梦想世界:长风问剑录》药师一图流分享  C#解析来自网络的XML流数据 实时错误处理与重试机制  Python中深度嵌套字典与列表的数据提取与条件过滤指南  哔哩哔哩在线观看入口 B站官网免费进入  sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码  GBA模拟器手柄按键设置  139邮箱登录入口官网 139邮箱登录入口官网网址  Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  todesk如何添加信任设备_todesk信任设备设置教程  《知到》打卡课程方法  《红果免费短剧》下载观看方法  《气泡星球》兑换码礼包大全  《星露谷物语》克林特好感度事件介绍  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口  蛙漫2(台版)正版官网 2025免费网页版分享  追剧达人如何发弹幕  《真我》申请退款方法  iPhone14无法连接蓝牙设备如何解决  智学网成绩单查询系统网_智学网学生平台登录  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  抄漫画官网防走失地址_抄漫画最新漫画完整版阅读入口  MacBook Pro词典使用指南  qq邮箱格式填写示例 qq邮箱标准填写规范  J*aScript模块加载器_RequireJS原理分析  如何用mysql实现客户反馈管理_mysql客户反馈数据库方法  知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法  《下一站江湖2》风神腿获取攻略  更换小红书群背景怎么换?小红书群规则怎么设置?  《领英》查看屏蔽名单方法  如何在CSS中设置背景图像:一个全面指南  歌词怎么展示在|直播|间视频号?有什么注意事项?  《偃武》甘宁技能详解  苹果手机手电筒无法开启  c++如何使用std::thread::join和detach_c++线程生命周期管理 

 2025-12-06

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.