CentOS 下 C++ 网络通信协议实践指南
一 常用协议与适用场景
二 环境准备与依赖安装
sudo yum groupinstall "Development Tools" -ysudo yum install -y gcc-c++ openssl-devel boost-devel三 极简 TCP 与 UDP 示例
socket(AF_INET, SOCK_STREAM, 0) → setsockopt(SO_REUSEADDR|SO_REUSEPORT) → bind → listen → accept → read/send → closeint server_fd = socket(AF_INET, SOCK_STREAM, 0);
int opt = 1; setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt));
struct sockaddr_in addr{};
addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(8080);
bind(server_fd, (struct sockaddr*)&addr, sizeof(addr));
listen(server_fd, 128);
int fd = accept(server_fd, nullptr, nullptr);
char buf[1024]; ssize_t n = read(fd, buf, sizeof(buf)-1);
write(fd, buf, n); close(fd); close(server_fd);
socket → connect → send/recv → closeint sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serv{};
serv.sin_family = AF_INET; serv.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &serv.sin_addr);
connect(sock, (struct sockaddr*)&serv, sizeof(serv));
write(sock, "Hello", 5);
char buf[1024]; read(sock, buf, sizeof(buf)-1); close(sock);
socket(AF_INET, SOCK_DGRAM, 0) → bind → recvfrom/sendtoint sock = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in addr{};
addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(9000);
bind(sock, (struct sockaddr*)&addr, sizeof(addr));
char buf[65536]; struct sockaddr_in cli{}; socklen_t len = sizeof(cli);
ssize_t n = recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr*)&cli, &len);
sendto(sock, buf, n, 0, (struct sockaddr*)&cli, len); close(sock);
g++ -std=c++11 server_tcp.cpp -o server_tcp && ./server_tcpg++ -std=c++11 client_tcp.cpp -o client_tcp && ./client_tcpg++ -std=c++11 server_udp.cpp -o server_udp && ./server_udpg++ -std=c++11 client_udp.cpp -o client_udp && ./client_udp 127.0.0.1 9000。四 数据序列化与报文设计
[4B magic][1B ver][2B cmd][4B body_len][2B checksum][N bytes body].proto 编译、序列化/反序列化与客户端/服务端交互。五 性能与工程化建议