当前位置: 首页 > news >正文

王杰国庆作业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;
}

运行结果

http://www.lryc.cn/news/182458.html

相关文章:

  • 【C语言】循环结构程序设计 (详细讲解)
  • Spring的注解开发-注解原理解析-xml方式/注解方式组件扫描
  • 导出视频里的字幕
  • 【KingbaseES】银河麒麟V10 ARM64架构_安装人大金仓数据库KingbaseES_V8R6(CentOS8)
  • 【Vue】Vuex详解,一文读懂并使用Vuex
  • 第三章 C程序设计
  • QB/T 2703-2020 汽车装饰用皮革检测
  • 使用正则表达式批量修改函数
  • 【网络协议】UDP
  • 雷达编程实战之提高探测速度
  • pyspark常用功能记录
  • Spring面试题学习: 单例Bean是单例模式吗?
  • EM@常用三角函数图象性质(中学部分)
  • 一文拿捏Spring事务之、ACID、隔离级别、失效场景
  • input输入表头保存excel文件
  • DataBinding双向绑定简介
  • Is This The Intelligent Model(这是智能模型吗)
  • MySQL事务:特性、使用、并发事务问题和隔离级别
  • FFmpeg日志系统、文件与目录、操作目录
  • 好奇喵 | Surface Web ---> Deep Web ---> Dark Web
  • 三、thymeleaf基本语法
  • 创建一个新的IDEA插件项目
  • Doris数据库BE——冷热数据方案
  • Python无废话-办公自动化Excel格式美化
  • 竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别
  • Django 数据库迁移(Django-04)
  • Redis相关概念
  • Scala第十八章节
  • JAVA学习(4)-全网最详细~
  • 【单片机】12-串口通信和RS485