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

您的位置: 首页 > 文章列表 > 编程开发 > CentOS C++网络通信如何实现

CentOS C++网络通信如何实现

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

扫一扫,手机访问

在CentOS上搞C++网络通信,最经典的路径就是套接字(socket)接口——说白了,就是让不同机器上的进程通过IP协议互传数据。整个过程不复杂,但有几个关键步骤得踩实了。下面从环境准备到跑通一个最简单的例子,一步一步来。

CentOS C++网络通信如何实现

  1. 先把开发库装上
    CentOS默认可能缺几个基础包,主要是glibc-develmake。一条命令搞定:

    sudo yum install glibc-devel make

    这一步别跳过,否则后面编译时可能会报找不到头文件的错。

  2. 写一个最简单的C++服务端
    创建一个文件,比如network.cpp,然后把下面这段代码贴进去。它实现了一个TCP服务端,监听8080端口,收到客户端消息后打印出来,再回一句“Hello from server”。

    #include 
    #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";
    
        // Creating socket file descriptor
        if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
            perror("socket failed");
            exit(EXIT_FAILURE);
        }
    
        // Forcefully attaching socket to the port 8080
        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);
    
        // Forcefully attaching socket to the port 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 << buffer << std::endl;
        send(new_socket, hello, strlen(hello), 0);
        std::cout << "Hello message sent\n";
    
        close(new_socket);
        close(server_fd);
        return 0;
    }

    这段代码虽然短,但包含了socket编程的完整生命周期:创建、绑定、监听、接受连接、读写数据、关闭。每一步都有基本的错误处理,生产环境当然还要更细致,但作为起步足够了。

  3. 用g++编译
    终端里敲一行:

    g++ -o network network.cpp

    如果没有报错,当前目录就会生成一个network的可执行文件。

  4. 运行并测试
    先在一个终端启动服务端:

    ./network

    然后新开一个终端,用telnet或者nc连上去:

    telnet localhost 8080

    或者

    nc localhost 8080

    连上后随便输入一行文字回车,服务端终端就会打印出你输入的内容,并给客户端返回“Hello from server”。整个过程就算跑通了。

当然,这只是一个单连接的单线程示例。真实场景下,需要处理多客户端并发、超时重连、非阻塞I/O等复杂情况。这时候可以考虑引入Boost.Asio、libevent、libuv这类网络库,能省掉不少底层细节。不过,先把基础socket流程走一遍,理解每一行代码的含义,后面的进阶学习会更扎实。

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

热门关注