王杰国庆作业day6
服务器
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <my_head.h>
#define PORT 2324 //端口号
#define IP "192.168.10.107" //本机IP
int main(int argc, const char *argv[])
{sqlite3* db=NULL;if(sqlite3_open("./my.db",&db)!=SQLITE_OK){fprintf(stderr,"sqlite3_open %d : %s __%d__\n",\sqlite3_errcode(db),sqlite3_errmsg(db),__LINE__);return -1;}printf("database open success __%d__\n",__LINE__);//创建一张表格char sql[128]="create table if not exists stu (name char,password int);";char* errmsg=NULL;if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK){fprintf(stderr,"sqlite3_exec: %s __%d__\n",errmsg,__LINE__);return -1;}printf("create table stu success\n");//创建流式套接字int sfd = socket(AF_INET,SOCK_STREAM,0);if(sfd<0){ERR_MSG("socket");return -1;}printf("socket create success\n");//允许端口快速复用int reuse = 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0){ERR_MSG("setsockopt");return -1;} printf("允许端口快速复用成功\n");//填充地址信息结构体给bind函数绑定使用//真实地址信息结构体根据地质族指定,AF_INET;man 7 ipstruct sockaddr_in sin;sin.sin_family = AF_INET; //必须填AF_INET;sin.sin_port = htons(PORT); //端口号网络字节序,1024-49151sin.sin_addr.s_addr = inet_addr(IP); //本机IP的网络字节序,ifconfig//绑定服务器的地址信息》必须绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("bind");return -1;}printf("bind success\n");//将套接字转换成被动监听状态if(listen(sfd,128)<0){ERR_MSG("listen");return -1;}printf("listen success\n");struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);//获取连接成功的客户端信息,生成新的文件描述符//该文件描述符才是与客户端通信的文件描述符//int newfd = accept(sfd,NULL,NULL);int newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen);if(newfd<0){ERR_MSG("accept");return -1;}printf("[%s:%d] newfd =%d 客户端连接成功__%d__\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);char buf[128]="";ssize_t res=0;int flag=0;while(1){bzero(buf,sizeof(buf));//接收数据res=recv(newfd,buf,sizeof(buf),0);if(res<0){ERR_MSG("recv");return -1;}else if(0==res){printf("[%s:%d] newfd=%d : 客户端下线 __%d__\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);break;}// char* p=ntohs(buf); int i;char str[128]="";for(i=0;buf[i]!=' ';i++){str[i]=buf[i];}str[i]=buf[i];char sql[128]="select name from stu;";char **pres=NULL;int row,column;char* errmsg=NULL;if(sqlite3_get_table(db,sql,&pres,&row,&column,&errmsg)!=SQLITE_OK){fprintf(stderr,"sqlite3_get_table: %s \n",errmsg);return -1;}for(int i=0;i<row+1;i++){for(int j=0;j<column;j++){if(strcmp(str,pres[(i*column)+j])==0){printf("重复注册\n");flag=1;}}}if(flag==0){sqlite3_free_table(pres);char sql1[128]="";char* p1=buf+strlen(str);sprintf(sql1,"insert into stu values(\"%s\",\"%s\");",str,p1);char* errmsg1 = NULL;if(sqlite3_exec(db,sql1,NULL,NULL,&errmsg1)!=SQLITE_OK){fprintf(stderr,"sqlite3_exec: %s __%d__\n",errmsg1,__LINE__);return -1;}printf("insert success\n");if(strcmp(buf,"quit")==0)break;//发送数据strcat(buf," add success");if(send(newfd,buf,sizeof(buf),0)<0){ERR_MSG("send");return -1;}printf("send success\n");}else if(flag==1)break;}//关闭套接字close(sfd);close(newfd);return 0;
}
客户端
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <my_head.h>
#define SER_PORT 2324 //端口号
#define SER_IP "192.168.10.107" //本机IP
int main(int argc, const char *argv[])
{//创建流式套接字int cfd = socket(AF_INET,SOCK_STREAM,0);if(cfd<0){ERR_MSG("socket");return -1;}printf("socket create success\n");//允许端口快速复用int reuse = 1;if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0){ERR_MSG("setsockopt");return -1;} printf("允许端口快速复用成功\n");//填充地址信息结构体给bind函数绑定使用//真实地址信息结构体根据地质族指定,AF_INET;man 7 ipstruct sockaddr_in sin;sin.sin_family = AF_INET; //必须填AF_INET;sin.sin_port = htons(SER_PORT); //端口号网络字节序,1024-49151sin.sin_addr.s_addr = inet_addr(SER_IP); //本机IP的网络字节序,ifconfigif(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_MSG("connect");return -1;}printf("connect server success\n");char buf[128]="";ssize_t res=0;while(1){bzero(buf,sizeof(buf)); //发送数据printf("请输入账户 密码>> ");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]='\0';if(send(cfd,buf,sizeof(buf),0)<0){ERR_MSG("send");return -1;}printf("send success\n");if(strcmp(buf,"quit")==0)break;bzero(buf,sizeof(buf));//接收数据res=recv(cfd,buf,sizeof(buf),0);if(res<0){ERR_MSG("recv");return -1;}else if(0==res){printf("[%s:%d] newfd=%d : 服务器下线 __%d__\n",\SER_IP,SER_PORT,cfd,__LINE__);break;}printf("[%s:%d] newfd=%d : %s __%d__\n",\SER_IP,SER_PORT,cfd,buf,__LINE__);}//关闭套接字close(cfd);return 0;
}
运行结果


相关文章:
王杰国庆作业day6
服务器 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <my_head.h> #define PORT 2324 //端口号 #define IP "192.168.10.107" //本机IP int main(int argc, const char *argv[]) {sqlite3* d…...
【C语言】循环结构程序设计 (详细讲解)
前言:前面介绍了程序中常常用到的顺序结构和选择结构,但是只有这两种结构是不够的,还有用到循环结构(或者称为重复结构)。因为在日常生活中或是在程序所处理的问题中常常遇到需要重复处理的问题。 【卫卫卫的代码仓库】 【选择结构】 【专栏链…...
Spring的注解开发-注解原理解析-xml方式/注解方式组件扫描
目录 Spring注解的解析原理 xml配置组件扫描 注解方式配置组件扫描 原理图 yysy,没有搞太明白,真的复杂,欢迎大佬留言解惑 Spring注解的解析原理 使用Component等注解配置完毕后,要配置组件扫描才能使注解生效 xml配置组件扫…...
导出视频里的字幕
导出视频里的字幕 如何利用剪映快速提取并导出视频里的字幕 https://jingyan.baidu.com/article/c35dbcb0881b6fc817fcbcd2.html 如何快速提取视频中的字幕?给大家介绍一种简单高效又免费的提取方法。需要利用到“剪映”,以下是具体的操作步骤和指引&a…...
【KingbaseES】银河麒麟V10 ARM64架构_安装人大金仓数据库KingbaseES_V8R6(CentOS8)
🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的…...
【Vue】Vuex详解,一文读懂并使用Vuex
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《ELement》。🎯🎯 …...
第三章 C程序设计
常量与变量 常量:整型常量:如1000 实型常量:十进制小数 字符常量:?! 变量:变量必须先定义,后使用。 标识符:一个对象的名字。 浮点型数据 浮点型数据是用来表示具…...
QB/T 2703-2020 汽车装饰用皮革检测
汽车装饰用皮革主要用于坐垫皮革,座椅套皮革,靠垫套皮革,方向盘皮革和其他装饰用皮革,比如仪表盘等,其物理和环保性能非常重要,对人体的健康能起到很大的影响。 QB/T 5754-2022水性/无溶剂聚氨酯复合人造革…...
使用正则表达式批量修改函数
贪心匹配,替换中的$1代表括号中的第一组。 使用[\s\S\r]代表所有字符,同时加个问号代表不贪心匹配:...
【网络协议】UDP
UDP协议与TCP协议都是传输层协议,应用层把数据拷贝到传输层,后续动作由下层自行决定。 UDP协议端格式 16位 UDP 长度 , 表示整个数据报 (UDP 首部 UDP 数据 ) 的最大长度 ;(也就是65535字节) 如果校验和出错 , 就会直接丢弃 ; …...
雷达编程实战之提高探测速度
有效帧频率作为雷达一个非常核心的指标,它代表了雷达探测识别的速度,速度越快,后级各项智能驾驶功能就能得到更快、更有效的判断。本篇文章首先从硬件的角度,提供了一种合理利用片上资源提高探测识别速度的常用方法,然…...
pyspark常用功能记录
前言 pyspark中很多常用的功能,过段时间没有使用就容易忘记,需要去网上搜索,这里总结一下,省的以后还去去搜,供自己以后参考。 withColumn def hot_func(info_str):if info_str:eturn "1"return "0&…...
Spring面试题学习: 单例Bean是单例模式吗?
单例Bean是单例模式吗 学习背景答案扩展知识单例模式Spring BeanJava Bean单例Bean 个人评价我的回答 学习背景 想换工作. 学习记录, 算是一个输出. 答案 通常来说, 单例模式是指在一个JVM中, 一个类只能构造出一个对象. 有很多方法来实现单例模式, 比如饿汉模式. 但是我们通…...
EM@常用三角函数图象性质(中学部分)
文章目录 abstract正弦函数正弦型函数转动相关概念旋转角速度转动周期转动频率初相小结 余弦函数的图象与性质性质 正切函数的图象和性质由已知三角函数值求角任意角范围内反三角函数(限定范围内)反正弦反余弦反正切 abstract 讨论 sin , cos , tan \sin,\cos,\tan s…...
一文拿捏Spring事务之、ACID、隔离级别、失效场景
1.🌟Spring事务 1.编程式事务 事务管理代码嵌入嵌入到业务代码中,来控制事务的提交和回滚,例如TransactionManager 2.声明式事务 使用aop对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,执行完目…...
input输入表头保存excel文件
input输入表头 input输入表头 (input内除了/,空格 回车 标点符号等 全部作为单元格分隔符)保存/storage/emulated/0/代码文件/ 没有就创建文件名命名方法:编号. 库 时间戳嗨!听说你有个需求,想根据用户输入…...
DataBinding双向绑定简介
一、简介 在Vue中使用的是MVVM架构。通过ViewModel可以实现M层和V层数据的双向绑定。Model层的数据发生变化后,会自动更新View层UI。UI层数据发生变化(用户输入),可以驱动Model层的数据发生变化,借助于Vue框架中的View…...
Is This The Intelligent Model(这是智能模型吗)
Is This The Intelligent Model 这是智能模型吗 Ruoqi Sun Academy of Military Science Defense Innovation Institute, Beijing, 100091, China E-mail: ruoqisun7163.com The exposed models are called artificial intelligent models[1-3]. These models rely on knowled…...
MySQL事务:特性、使用、并发事务问题和隔离级别
什么是事务? 在数据库中,事务是一组SQL操作,它们被视为一个单一的工作单元。事务必须同时成功或失败,以确保数据库的一致性。事务通常遵循ACID属性,即原子性(Atomicity)、一致性(Co…...
FFmpeg日志系统、文件与目录、操作目录
目录 FFmpeg日志系统 FFmpeg文件与目录操作 FFmpeg文件的删除与重命名 FFmpeg操作目录及list的实现 操作目录重要函数 操作目录重要结构体 FFmpeg日志系统 下面看一个简单的 demo。 #include <stdio.h> #include <libavutil/log.h>int main(int argc,char* …...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
