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

先把开发库装上
CentOS默认可能缺几个基础包,主要是glibc-devel和make。一条命令搞定:sudo yum install glibc-devel make这一步别跳过,否则后面编译时可能会报找不到头文件的错。
写一个最简单的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编程的完整生命周期:创建、绑定、监听、接受连接、读写数据、关闭。每一步都有基本的错误处理,生产环境当然还要更细致,但作为起步足够了。
用g++编译
终端里敲一行:g++ -o network network.cpp如果没有报错,当前目录就会生成一个
network的可执行文件。运行并测试
先在一个终端启动服务端:./network然后新开一个终端,用
telnet或者nc连上去:telnet localhost 8080或者
nc localhost 8080连上后随便输入一行文字回车,服务端终端就会打印出你输入的内容,并给客户端返回“Hello from server”。整个过程就算跑通了。
当然,这只是一个单连接的单线程示例。真实场景下,需要处理多客户端并发、超时重连、非阻塞I/O等复杂情况。这时候可以考虑引入Boost.Asio、libevent、libuv这类网络库,能省掉不少底层细节。不过,先把基础socket流程走一遍,理解每一行代码的含义,后面的进阶学习会更扎实。