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

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

C++在Linux环境下如何进行网络编程

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

扫一扫,手机访问

在Linux环境下用C++做网络编程,套接字(socket)API是绕不开的基础工具。下面这个简单的TCP示例,能帮你快速理解服务端和客户端是怎么建立连接的。看完你就知道,其实核心流程并不复杂——创建套接字、绑定、监听、接受,再到收发数据,每一步都有对应的系统调用。

C++在Linux环境下如何进行网络编程

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};
    const char* hello = "Hello from server";

    // 创建套接字文件描述符
    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, strlen(hello), 0);
    std::cout << "Hello message sent\n";

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

TCP客户端示例

#include 
#include 
#include 
#include 
#include 

int main() {
    int sock = 0;
    struct sockaddr_in serv_addr;
    const char* hello = "Hello from client";
    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, strlen(hello), 0);
    std::cout << "Hello message sent\n";

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

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

编译和运行

操作起来很简单,按下面几步走就行:

  1. 服务器代码存成 server.cpp,客户端代码存成 client.cpp
  2. 用 g++ 编译:
g++ -o server server.cpp
g++ -o client client.cpp
  1. 打开一个终端,先运行服务器
./server
  1. 再开一个终端,运行客户端:
./client

这时候客户端会连上服务器,发一条消息,然后收到服务器的回复。一个最基础的TCP通信就跑通了。

注意事项

  • 别忘了检查防火墙,确保端口(本例是8080)没有被挡住。
  • 示例里的错误处理非常简陋,真实项目里可千万不能这么干——每条系统调用都值得你认真检查返回值。
  • 如果服务端要同时处理多个客户端,单线程阻塞模型肯定不够用。一般会用多线程或者异步I/O来搞定。
  • 想省事的话,可以考虑 Boost.Asio 这样的高级库,功能更全,性能也更好,写起来也优雅不少。
本文转载于:https://www.yisu.com/ask/1688532.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注