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

项目——基于C/S架构的预约系统平台(2)

今日进展:

ser.h

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<string>
#include<netinet/in.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<event.h>
#include<jsoncpp/json/json.h>
#include<mysql/mysql.h>using namespace std;const int listenmax=10;enum op_type{DL=1,ZC,CKYY,YD,CKYD,QXYD,TC
};class mysql_client{
public:mysql_client(){db_ips="127.0.0.1";db_username="root";db_dbname="project_db";db_passwd="770202";}~mysql_client(){mysql_close(&mysql_con);}bool mysql_connectserver();bool mysql_register(const string &tel,const string &passwd,const string &name);private:MYSQL mysql_con;string db_ips;string db_username;string db_dbname;string db_passwd;
};class socket_listen{
public:socket_listen(){sockfd=-1;m_port=6000;m_ips="127.0.0.1";}socket_listen(string ips,short port):m_ips(ips),m_port(port){sockfd=-1;}bool socket_init();int accept_client();void set_base(struct event_base*base){this->base=base;}int getsockfd()const{return sockfd;}struct event_base* get_base()const{return base;}private:int sockfd;short m_port;string m_ips;struct event_base * base;
};class socket_con{
public:socket_con(int fd):c(fd){c_ev=NULL;}void set_ev(struct event*ev){c_ev=ev;}~socket_con(){event_free(c_ev);close(c);}void recv_data();void send_err();void send_ok();void user_register();void user_login();private:int c;struct event* c_ev;Json::Value val;//mysql_client cli;
};

ser.cpp

#include"ser.h"bool mysql_client::mysql_connectserver(){MYSQL*mysql=mysql_init(&mysql_con);if(mysql==NULL)return false;mysql=mysql_real_connect(mysql,db_ips.c_str(),db_username.c_str(),db_passwd.c_str(),db_dbname.c_str(),3306,NULL,0);    if(mysql==NULL){cout<<"connect db server err"<<endl;return false;}return true;
}
bool mysql_client::mysql_register(const string &tel,const string &passwd,const string &name){//insert into user_info values(0,'13200000000','小王','123456',1);string sql=string("insert into user_info values(0,'")+tel+string("','")+name+string("','")+passwd+string("',1)");if(mysql_query(&mysql_con,sql.c_str())!=0)return false;return true;
}//socket_listen
bool socket_listen::socket_init(){sockfd=socket(AF_INET,SOCK_STREAM,0);if(-1==sockfd)return false;struct sockaddr_in saddr;memset(&saddr,0,sizeof(saddr));saddr.sin_family=AF_INET;saddr.sin_port=htons(m_port);saddr.sin_addr.s_addr=inet_addr(m_ips.c_str());int res=bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));if(-1==res){perror("绑定失败\n");close(sockfd);return false;}res=listen(sockfd,listenmax);if(res==-1)return false;return true;
}
int socket_listen::accept_client(){int c=accept(sockfd,NULL,NULL);return c;
}//socket_convoid socket_con::send_err(){Json::Value res_val;res_val["status"]="ERR";send(c,res_val.toStyledString().c_str(),strlen(res_val.toStyledString().c_str()),0);
}void socket_con::send_ok(){Json::Value res_val;res_val["status"]="OK";send(c,res_val.toStyledString().c_str(),strlen(res_val.toStyledString().c_str()),0);
}void socket_con::user_register(){string tel,passwd,username;tel=val["user_tel"].asString();passwd=val["user_passwd"].asString();username=val["user_name"].asString();if(tel.empty()||passwd.empty()||username.empty()){send_err();}mysql_client cli;if(!cli.mysql_connectserver()){send_err();return;}if(!cli.mysql_register(tel,passwd,username)){send_err();return;}send_ok();return;}void socket_con::user_login(){}void socket_con::recv_data(){char buff[256]={0};int n=recv(c,buff,255,0);if(n<=0){cout<<"client close"<<endl;delete this;return;}//测试cout<<"recv:"<<buff<<endl;Json::Reader Read;if(!Read.parse(buff,val)){cout<<"recv_data:解析json失败"<<endl;send_err();return;}int ops=val["type"].asInt();switch(ops){case DL://登陆user_login();break;case ZC://注册user_register();break;case CKYY://查看预约break;case YD://预订break;case QXYD://取消预订break;case CKYD://查看预订break;case TC://退出break;default:cout<<"输入无效"<<endl;break;}//解析}//callback
void SOCK_CON_CALLBACK(int fd,short ev,void *arg){socket_con*q=(socket_con*)arg;if(ev&EV_READ){q->recv_data();}}void SOCK_LIS_CALLBACK(int sockfd,short ev,void *arg){socket_listen* p=(socket_listen*)arg;if(p==NULL)return;if(ev&EV_READ){ //处理读事件int c=p->accept_client();if(c==-1)return;cout<<"accept:c="<<c<<endl;socket_con *q=new socket_con(c);struct event*c_ev=event_new(p->get_base(),c,EV_READ|EV_PERSIST,SOCK_CON_CALLBACK,q);if(c_ev==NULL){close(c);delete q;return;}q->set_ev(c_ev);//添加到libeventevent_add(c_ev,NULL);}}int main(){//监听套接字socket_listen socket_ser;if(!socket_ser.socket_init()){cout<<"socket init err!"<<endl;exit(1);}//创建libevent basestruct event_base*base=event_init();if(base==NULL){cout<<"base null"<<endl;exit(1);}//设置socket_listen中的libevent中的basesocket_ser.set_base(base);//添加sockfd到libeventstruct event*sock_ev=event_new(base,socket_ser.getsockfd(),EV_READ|EV_PERSIST,SOCK_LIS_CALLBACK,&socket_ser);event_add(sock_ev,NULL);//启动事件循环event_base_dispatch(base);//select poll epoll//释放资源event_free(sock_ev);event_base_free(base);return 0;
}

cli.h

 #include<iostream>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<string>
#include<netinet/in.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<jsoncpp/json/json.h>using namespace std;
const int offset=2;
enum op_type{DL=1,ZC,CKYY,YD,CKYD,QXYD,TC};
class socket_client{
public:socket_client(){sockfd=-1;ips="127.0.0.1";port=6000;dl_flg=false;user_op=0;runing=true;}socket_client(string ips,short port){sockfd=-1;this->ips=ips;this->port=port;dl_flg=false;user_op=0;runing=true;}void print_info();~socket_client(){close(sockfd);}bool connnect_server();void user_register();void user_login();void run();
private:string ips;short port;int sockfd;bool dl_flg;string username;string usertel;int user_op;bool runing;
};  

cli.cpp

  #include"cli.h"
bool socket_client::connnect_server(){sockfd=socket(AF_INET,SOCK_STREAM,0);if(-1==sockfd){perror("create socket err!\n");return false;}struct sockaddr_in saddr;memset(&saddr,0,sizeof(saddr));saddr.sin_family=AF_INET;saddr.sin_port=htons(port);saddr.sin_addr.s_addr=inet_addr(ips.c_str());int res=connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));if(res==-1){perror("connect ser err!\n");return false;}cout<<"connect to server success"<<endl;return true;
}
void socket_client::print_info(){if(dl_flg){cout<<"--已登陆-------用户名:"<<username<<"-------"<<endl;cout<<"1:查看预约   2:预订  3: 查看我的预约  4:取消预约  5:退出"<<endl;cout<<"-------------------------------------------------"<<endl;cout<<"请输入选项编号:"<<endl;cin>>user_op;user_op+=offset;}else{cout<<"---未登陆-----游客-----"<<endl;cout<<"1:登陆   2:注册  3: 退出 "<<endl;cout<<"-----------------"<<endl;cout<<"请输入选项编号:"<<endl;cin>>user_op;if(user_op==3)user_op=TC;}
}void socket_client::user_register(){cout<<"请输入用户手机号码:"<<endl;cin>>usertel;cout<<"请输入用户名"<<endl;cin>>username;string passwd,tmp;cout<<"请输入密码:"<<endl;cin>>passwd;cout<<"请再次输入密码"<<endl;cin>>tmp;if(usertel.empty()||username.empty()){cout<<"手机或用户名不能为空"<<endl;return;}if(passwd.compare(tmp)!=0){cout<<"密码不一致"<<endl;return;}Json::Value val;val["type"]=ZC;val["user_tel"]=usertel;val["user_name"]=username;val["user_passwd"]=passwd;send(sockfd,val.toStyledString().c_str(),strlen(val.toStyledString().c_str()),0);char buff[256]={0};if(recv(sockfd,buff,255,0)<=0){cout<<"ser close"<<endl;return;}val.clear();Json::Reader Read;if(!Read.parse(buff,val)){cout<<"json 解析失败"<<endl;return;}string s=val["status"].asString();if(s.compare("OK")!=0){cout<<"注册失败"<<endl;return;}dl_flg=true;cout<<"注册成功"<<endl;return;
}
void socket_client::user_login(){cout<<"登陆"<<endl;
}void socket_client::run(){while(true){print_info();switch(user_op){case DL:user_login();break;case ZC:user_register();break;case CKYY://查看预约break;case YD://预订break;case QXYD://取消预订break;case CKYD://查看预订break;case TC://退出runing=false;break;default:cout<<"输入无效"<<endl;break;}}}
int main(){socket_client cli;if(!cli.connnect_server())exit(1);cli.run();exit(0);
}

http://www.dtcms.com/a/520810.html

相关文章:

  • 网站建设工期及预算品牌vi形象设计公司
  • C++ 的学习路线(转)
  • wsl使用代理网络
  • c#笔记番外篇同步异步并行串行多线程(以及lambda 表达式和Stopwatch)
  • 扬州市住房建设局网站免费微信公众号素材网
  • P8813 [CSP-J 2022] 乘方
  • QT实现消息未读提示
  • 一个人是否可以做公司网站做网站 租服务器吗
  • 数学教学网站开发微网站 举例
  • deeptest平台使用python脚本进行断言 含json预处理
  • 爬虫的意义
  • 文化投资的微网站怎么做兰州网站建设人才招聘
  • 以前可以做视频的网站免费erp企业管理系统
  • 世界模型和大语言模型的区别
  • 使用navicat下载和上传二进制图片 mediumblob、blob类型
  • 【人工智能系列:走近人工智能04】了解人工智能的框架:从TensorFlow到PyTorch
  • 【笔记】解决 ComfyUI 安装节点 ComfyUI-Addoor (葵花宝典)后启动报错:No module named ‘ComfyUI-Addoor’
  • 婚纱影楼网站源码财务管理咨询
  • 网站建设有什么作用推广网站的软文
  • 比特币P2PKH交易花费的核心流程与数据流转
  • 杰理蓝牙芯片开发平台API说明 21
  • 在 Sui 上构建《勇者前线》游戏的新篇章
  • 江西省建设工程学校网站cms管理什么意思
  • SAP SD 价格主数据创建接口分享
  • huggingface模型下载到本地
  • 有没有找人做标书的网站国外最开放的浏览器是哪个
  • react虚拟滚动
  • 网站404怎么做郑州短视频拍摄制作公司
  • 国外设计作品网站深圳龙岗区地图
  • 网站开发属于软件开发服务吗临沂seo公司稳健火星