商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何在Linux上使用C++进行网络编程

如何在Linux上使用C++进行网络编程

  发布于2026-07-20 阅读(0)

扫一扫,手机访问

在 Linux 下用 C++ 做网络编程,最直接的方式就是套接字(Socket)API。下面这个例子,你一看就明白——一个简单的 TCP 服务器加客户端,代码量不大,但五脏俱全。

先看服务器端,它的核心流程是:创建套接字 → 绑定端口 → 开始监听 → 等待客户端连上来 → 收数据 → 回数据 → 关闭连接。每一步都对应一个系统调用,错误处理也一并写上了,方便你直接编译跑起来。

#include 
#include 
#include 
#include 
#include 

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

    // 创建套接字文件描述符
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    // 设置套接字选项
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
        perror("setsockopt");
        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);
    }

    // 接受连接
    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 << "Message from client: " << buffer << std::endl;

    // 向客户端发送数据
    send(new_socket, "Hello from server", 18, 0);
    std::cout << "Hello message sent\n";

    // 关闭套接字
    close(new_socket);
    close(server_fd);
    return 0;
}

再来看客户端,角色正好反过来:创建套接字 → 配置服务器地址 → 发起连接 → 发送数据 → 接收回复 → 关闭。这里面用到了 inet_pton 把 IP 地址字符串转成二进制格式,这是现代网络编程的标准做法。

#include 
#include 
#include 
#include 
#include 

int main() {
    int sock = 0;
    struct sockaddr_in serv_addr;
    char buffer[1024] = {0};

    // 创建套接字文件描述符
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        std::cout << " Socket creation error ";
        return -1;
    }

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

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

    // 连接到服务器
    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        std::cout << "Connection Failed ";
        return -1;
    }

    // 向服务器发送数据
    send(sock, "Hello from client", 18, 0);
    std::cout << "Hello message sent\n";

    // 读取服务器发送的数据
    read(sock, buffer, 1024);
    std::cout << "Message from server: " << buffer << std::endl;

    // 关闭套接字
    close(sock);
    return 0;
}

怎么跑起来?很简单,先编译服务器端:

g++ server.cpp -o server
./server

服务器启动后会监听 8080 端口,等待连接。然后另开一个终端编译客户端:

g++ client.cpp -o client
./client

客户端连上后,你会看到客户端发来“Hello from client”,服务器回复“Hello from server”。一来一回,一个完整的 TCP 通信就完成了。

这个例子虽然基础,但覆盖了 socket 编程中最关键的几个步骤:创建、绑定、监听、接受、连接、收发。实际项目中,你很可能需要处理多线程、非阻塞 IO、更大的数据缓冲区等等——但万变不离其宗,核心骨架就是这些。拿这段代码做起点,改改端口、加工一下业务逻辑,就能快速搭建出自己的网络服务。

本文转载于:https://www.yisu.com/ask/35592433.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注