在现代软件开发中,C++ TCP服务器是构建高性能网络应用的基础。无论是游戏后端、物联网设备通信,还是企业级服务系统,掌握C++网络编程技能都至关重要。本教程将手把手教你使用标准C++和操作系统提供的socket接口,从零开始搭建一个简单但功能完整的TCP服务器。
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP服务器的作用是监听特定端口,接受客户端连接,并与之进行双向数据通信。
本教程使用标准C++(C++11及以上),并依赖操作系统的socket API:
为简化跨平台问题,本文以 Linux/macOS 为例(代码稍作修改即可用于 Windows)。
我们将分步骤实现一个能接收客户端消息并回显(echo)的服务器。
#include <iostream>#include <cstring>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>
int server_fd = socket(AF_INET, SOCK_STREAM, 0);if (server_fd == -1) { std::cerr << "创建socket失败!\n"; return -1;}// 允许端口重用int opt = 1;setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));struct sockaddr_in address;address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY; // 监听所有IPaddress.sin_port = htons(8080); // 监听8080端口if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) < 0) { std::cerr << "绑定端口失败!\n"; close(server_fd); return -1;} if (listen(server_fd, 10) < 0) { // 最多排队10个连接 std::cerr << "监听失败!\n"; close(server_fd); return -1;}std::cout << "服务器启动成功,正在监听端口 8080...\n";struct sockaddr_in client_addr;socklen_t client_len = sizeof(client_addr);int client_socket = accept(server_fd, (struct sockaddr*)&client_addr, &client_len);if (client_socket < 0) { std::cerr << "接受连接失败!\n"; close(server_fd); return -1;}std::cout << "新客户端连接: " << inet_ntoa(client_addr.sin_addr) << ":" << ntohs(client_addr.sin_port) << "\n"; char buffer[1024] = {0};while (true) { int bytes_read = read(client_socket, buffer, sizeof(buffer) - 1); if (bytes_read <= 0) { std::cout << "客户端断开连接。\n"; break; } buffer[bytes_read] = '\0'; std::cout << "收到消息: " << buffer << "\n"; // 回显给客户端 write(client_socket, buffer, strlen(buffer));} close(client_socket);close(server_fd);
#include <iostream>#include <cstring>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int main() { // 创建 socket int server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd == -1) { std::cerr << "创建socket失败!\n"; return -1; } int opt = 1; setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); struct sockaddr_in address; 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) { std::cerr << "绑定端口失败!\n"; close(server_fd); return -1; } if (listen(server_fd, 10) < 0) { std::cerr << "监听失败!\n"; close(server_fd); return -1; } std::cout << "服务器启动成功,正在监听端口 8080...\n"; while (true) { // 持续接受新连接 struct sockaddr_in client_addr; socklen_t client_len = sizeof(client_addr); int client_socket = accept(server_fd, (struct sockaddr*)&client_addr, &client_len); if (client_socket < 0) { std::cerr << "接受连接失败!\n"; continue; } std::cout << "新客户端连接: " << inet_ntoa(client_addr.sin_addr) << ":" << ntohs(client_addr.sin_port) << "\n"; char buffer[1024] = {0}; while (true) { int bytes_read = read(client_socket, buffer, sizeof(buffer) - 1); if (bytes_read <= 0) break; buffer[bytes_read] = '\0'; std::cout << "收到消息: " << buffer << "\n"; write(client_socket, buffer, strlen(buffer)); } close(client_socket); std::cout << "客户端已断开。\n"; } close(server_fd); return 0;} 将上述代码保存为 tcp_server.cpp,在终端执行:
g++ -o tcp_server tcp_server.cpp
运行服务器:
./tcp_server
另开一个终端,使用 telnet 或 nc 测试:
telnet 127.0.0.1 8080
输入任意文字,服务器会原样返回,验证了我们的基于C++的TCP通信功能正常。
当前服务器一次只能处理一个客户端。要支持多客户端,可考虑以下方案:
这些内容属于高级C++ socket编程范畴,建议在掌握基础后再深入学习。
通过本教程,你已经成功实现了一个基础的C++ TCP服务器!这不仅帮助你理解网络通信原理,也为后续开发更复杂的网络应用打下坚实基础。坚持练习,你很快就能构建出工业级的网络服务系统!
本文由主机测评网于2025-12-23发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251212035.html