TCP计算器:C++网络编程入门

TCP计算器:C++网络编程入门 好的这是一个基于 TCP 协议的简易计算器项目的入门指南使用 C 实现。这个项目将帮助你理解基本的网络通信和协议设计概念。项目概述我们将构建一个客户端/服务器模型的计算器服务器端监听指定端口接收客户端发送的数学表达式如2 3。客户端端用户输入表达式发送到服务器接收计算结果并显示。协议使用简单文本协议如表达式\n服务器返回结果\n或错误信息\n。核心步骤1. TCP 通信基础服务器流程// 创建 socket int server_fd socket(AF_INET, SOCK_STREAM, 0); // 绑定地址和端口 struct sockaddr_in address; address.sin_family AF_INET; address.sin_addr.s_addr INADDR_ANY; address.sin_port htons(8080); // 端口号 bind(server_fd, (struct sockaddr*)address, sizeof(address)); // 监听连接 listen(server_fd, 5); // 接受客户端连接 int client_socket accept(server_fd, nullptr, nullptr);客户端流程int sock socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in serv_addr; serv_addr.sin_family AF_INET; serv_addr.sin_port htons(8080); inet_pton(AF_INET, 127.0.0.1, serv_addr.sin_addr); // 服务器 IP connect(sock, (struct sockaddr*)serv_addr, sizeof(serv_addr));2. 计算逻辑实现服务器端需解析表达式并计算例如double calculate(const std::string expr) { // 示例解析 a op b std::istringstream iss(expr); double a, b; char op; iss a op b; switch(op) { case : return a b; case -: return a - b; case *: return a * b; case /: if(b 0) throw std::runtime_error(除零错误); return a / b; default: throw std::runtime_error(无效运算符); } }3. 数据传输协议客户端发送5 * 3\n以\n结尾服务器响应成功15\n错误错误: 无效运算符\n4. 完整代码框架服务器端while(true) { char buffer[1024] {0}; int bytes_read read(client_socket, buffer, sizeof(buffer)); if(bytes_read 0) break; // 连接断开 try { std::string expr(buffer); double result calculate(expr); std::string response std::to_string(result) \n; send(client_socket, response.c_str(), response.size(), 0); } catch (const std::exception e) { std::string err 错误: std::string(e.what()) \n; send(client_socket, err.c_str(), err.size(), 0); } }客户端端std::string expr; std::cout 输入表达式 (如 23): ; std::getline(std::cin, expr); expr \n; // 添加协议结尾 send(sock, expr.c_str(), expr.size(), 0); char response[1024] {0}; read(sock, response, sizeof(response)); std::cout 结果: response;编译与测试编译# 服务器 g server.cpp -o server -lpthread # 客户端 g client.cpp -o client运行./server # 先启动服务器 ./client # 再启动客户端扩展建议支持复杂表达式使用栈解析中缀表达式如(12)*3。多线程服务器用线程池处理并发请求。错误恢复添加超时重传机制。协议优化改用二进制协议如struct { double a,b; char op; }。通过此项目你将掌握 TCP 通信、简单协议设计和 C 网络编程基础。尝试逐步扩展功能以加深理解