c入门第二十四篇: 学生成绩管理系统优化(可执行文件传参)

本文主要是介绍c入门第二十四篇: 学生成绩管理系统优化(可执行文件传参),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

我:“师弟,review完你的代码之后,你觉得有没有什么地方可以优化?”
师弟一脸懵。
我:“比如,你把客户端和服务端的可执行文件生成之后,我把服务端部署到我的测试机器上,客户端部署在另一台机器上,这样可行么?”
师弟:“师兄你这么说,那就是不可行了?”
我:“为什么不可行呢?”
师弟:“我先测试一下。”
十几分钟过后,师弟过来说,“的确不行,每次服务端的部署位置改变,客户端就出现连不上服务端的情况,主要是因为客户端中的server ip是固定的。除非重新修改客户端代码中的ip。”
我:“如果每次更换部署的服务器,都需要重新修改一次代码,再重新编译,是不是很麻烦?”
师弟:“是有点。我想想怎么优化一下。”

方式一 main函数传参

客户端程序,可以通过main函数传参的形式,带入ip,这样client运行方式,就变为了如下方式,可以灵活设置要连接的服务端的ip。

./client 127.0.0.1

完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>#define PORT 8080
#define BUF_SIZE 1024int main(int argc, char *argv[])
{int sock = 0;struct sockaddr_in serv_addr;char buffer[BUF_SIZE] = {0};if (argc != 2) {//参数解析printf("Help: %s ip!\n", argv[0]);return -1;}// Create a socketif ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {printf("Socket creation error!\n");return -1;}serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(PORT);// Convert IPv4 and IPv6 addresses from text to binary formif(inet_pton(AF_INET, argv[1], &serv_addr.sin_addr) <= 0) {printf("Invalid address/ Address not supported!\n");return -1;}// Connect to the serverif (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {printf("Connection Failed!\n");return -1;}while (1) {memset(buffer, 0, BUF_SIZE);// Read data from the serverread(sock, buffer, BUF_SIZE);printf("%s", buffer);if (strcmp(buffer, "Exit") == 0) {printf("\nNormal Exit, bye!\n");break;}// Send data to the serverscanf("%s", buffer);send(sock, buffer, strlen(buffer), 0);}close(sock);return 0;
}

int main(int argc, char *argv[])
参数说明:
第一个参数:argc表示传入参数的个数
第二个参数:argv是字符串数组,用来存放指向字符串参数的指针数组,每一个元素指向一个参数。各成员含义如下:
argv[0]:指向程序运行的名称。
argv[1]:指向第一个参数。
argv[2]:指向第二个参数。

argv[n]:指向第n个参数。
规定:argv[n]为NULL时,表示参数的结尾。
以 ./client 11 22 33为例说明如下:
程序参数说明

方式二 读取配置文件的形式

实现略

总结

对比两种方式,以main函数传参实现较为简单一些。在程序设计时候,需要时刻考虑程序的易用性,一个好用的系统,不只是功能完备就够的,好用也是关键。

这篇关于c入门第二十四篇: 学生成绩管理系统优化(可执行文件传参)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/753082

相关文章

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3