宽屏企业网站源码,有意境的设计公司名字,做电影网站免责声明有用吗,网站推广软件信息将 epoll 服务器
客户端拿来用 客户端#xff1a;
写一个界面#xff0c;里面有注册登录
服务器#xff1a;处理注册和登录逻辑#xff0c;注册的话将注册的账号密码写入数据库#xff0c;登录的话查询数据库中是否存在账号#xff0c;并验证密码是否正确
额外功能
写一个界面里面有注册登录
服务器处理注册和登录逻辑注册的话将注册的账号密码写入数据库登录的话查询数据库中是否存在账号并验证密码是否正确
额外功能客户端登录的时候服务器向客户端发送一个验证码只有验证码也正确的时候才能登录成功·
服务器部分
#include stdio.h
#include string.h
#include unistd.h
#include stdlib.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include pthread.h
#include semaphore.h
#include wait.h
#include signal.h
#include sys/socket.h
#include arpa/inet.h
#include sys/socket.h
#include sys/ipc.h
#include sys/sem.h
#include semaphore.h
#include sys/msg.h
#include sys/shm.h
#include sys/un.h
#include sys/epoll.h
#include sqlite3.htypedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;enum Type
{TYPE_REGIST,TYPE_LOGIN,
// TYPE_CHAT
};typedef struct User
{char name[20];char pswd[20];
// int sock;}user_t;typedef struct Pack
{enum Type type;char name[20];char pswd[20];char tarname[20];char text[1024];
}pack_t;
void read_data(int client);
int insert_user(user_t user);
int find_user(const char *username);
int callback(void * arg,int argc,char** argv,char** col);
//user_t user_arr[50]{0};
//int user_len0;
user_t user{0,0};
int main(int argc, const char *argv[])
{if(argc !2){printf(请输入端口号\n);return 1;}int portatoi(argv[1]);int serversocket(AF_INET,SOCK_STREAM,0);addr_in_t addr{0};addr.sin_familyAF_INET;addr.sin_porthtons(port);addr.sin_addr.s_addrinet_addr(0.0.0.0);if(bind(server,(addr_t*)addr,sizeof(addr))-1){perror(bind);return 1;}listen(server,10);int epfdepoll_create1(EPOLL_CLOEXEC);struct epoll_event epoll_stdin{.eventsEPOLLIN,.data.fd0};struct epoll_event epoll_server{.eventsEPOLLIN,.data.fdserver};epoll_ctl(epfd,EPOLL_CTL_ADD,0,epoll_stdin);epoll_ctl(epfd,EPOLL_CTL_ADD,server,epoll_server);struct epoll_event arr[50]{0};while(1){int lenepoll_wait(epfd,arr,50,-1);for(int i0;ilen;i){int fdarr[i].data.fd;if(fdserver){printf(有客户端连接\n);int clientaccept(server,0,0);struct epoll_event epoll_client{.eventsEPOLLIN,.data.fdclient};epoll_ctl(epfd,EPOLL_CTL_ADD,client,epoll_client);}else if(fd0){char buf[64];scanf(%63s,buf);while(getchar()!10);printf(键盘键入数据%s\n,buf);}else{read_data(fd);}}}return 0;
}int insert_user(user_t user)
{
// user_arr[user_len]user;
// user_len;sqlite3* dbNULL;if(sqlite3_open(./test.db,db)!SQLITE_OK){printf(数据库打开失败\n);return -1;}strcat(user.name,,);strcat(user.name,user.pswd);strcat(user.name,));char *bufuser.name;char* sqlinsert into user(username,pswd) values(;strcat(sql,buf);char* errmsgNULL;if(sqlite3_exec(db,sql,0,0,errmsg)!SQLITE_OK){return -1;}sqlite3_close(db);return 1;
}int find_user(const char* username)
{
/*for(int i0;iuser_len;i){if(strcmp(username,user_arr[i].name)0){return i;}}return -1;
*/sqlite3* dbNULL;if(sqlite3_open(./test.db,db)!SQLITE_OK){printf(数据库打开失败\n);return -1;}char* sqlselect * from user where username;strcat(sql,username);char* errmsgNULL;if(sqlite3_exec(db,sql,callback,user,errmsg)!SQLITE_OK){sqlite3_close(db);return -1;}sqlite3_close(db);return 1;
}
int callback(void * arg,int argc,char** argv,char** col)
{user_t* brr(user_t*)arg;strcpy(brr-name,argv[0]);strcpy(brr-pswd,argv[1]);return 1;
}void read_data(int client)
{pack_t pack{0};int resread(client,pack,sizeof(pack));switch(pack.type){case TYPE_REGIST:{int resfind_user(pack.name); char *msgNULL;if(res-1){user_t user {0};strcpy(user.name,pack.name);strcpy(user.pswd,pack.pswd);insert_user(user);msg注册成功;}else{msg该账号已存在;}strcpy(pack.text,msg);write(client,pack,sizeof(pack));break;}case TYPE_LOGIN:{int resfind_user(pack.name);char *msgNULL;if(res-1){msg该账号不存在;}else{
// user_t useruser_arr[res];if(strcmp(user.pswd,pack.pswd)0){msg登录成功;
// user_arr[res].sockclient;}else{msg密码错误;}}strcpy(pack.text,msg);write(client,pack,sizeof(pack));break;}
/*case TYPE_CHAT:{char *msgNULL;int resfind_user(pack.tarname);if(res-1){msg该用户不存在;strcpy(pack.text,msg);write(client,pack,sizeof(pack));}else{user_t useruser_arr[res];if(user.sock0){msg用户未登录;strcpy(pack.text,msg);write(client,pack,sizeof(pack));}else{int tarsockuser.sock;write(tarsock,pack,sizeof(pack));}}break;}
*/}
}客户端部分
#include stdio.h
#include string.h
#include unistd.h
#include stdlib.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include pthread.h
#include semaphore.h
#include wait.h
#include signal.h
#include sys/socket.h
#include arpa/inet.h
#include sys/socket.h
#include sys/ipc.h
#include sys/sem.h
#include semaphore.h
#include sys/msg.h
#include sys/shm.h
#include sys/un.h
#include sys/epoll.h
#include sqlite3.htypedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;enum Type
{TYPE_REGIST,TYPE_LOGIN,
// TYPE_CHAT
};typedef struct Pack
{enum Type type;char name[20];char pswd[20];char tarname[20];char text[1024];
}pack_t;void *thread_main(void *arg)
{int client*(int*)arg;while(1){pack_t pack{0};int resread(client,pack,sizeof(pack));if(res0){break;}switch(pack.type){case TYPE_REGIST:{printf(%s\n,pack.text);break;}case TYPE_LOGIN:{printf(%s\n,pack.text);break;}
// case TYPE_CHAT:
// {
// printf(接收到消息%s\n,pack.text);
// break;
// }}}
}int main(int argc, const char *argv[])
{if(argc !2){printf(请输入端口号\n);return 1;}int portatoi(argv[1]);int clientsocket(AF_INET,SOCK_STREAM,0);addr_in_t addr{0};addr.sin_familyAF_INET;addr.sin_porthtons(port);addr.sin_addr.s_addrinet_addr(192.168.133.128);if(connect(client,(addr_t*)addr,sizeof(addr))-1){perror(connect);return 1;}pthread_t id;pthread_create(id,0,thread_main,client);pthread_detach(id);while(1){int ch-1;printf(1.注册\n);printf(2.登录\n);
// printf(3.聊天\n);printf(0.退出\n);printf(请选择);scanf(%d,ch);while(getchar()!10);switch(ch){case 1:{pack_t pack{0};printf(请输入账号);scanf(%s,pack.name);while(getchar()!10);printf(请输入密码);scanf(%s,pack.pswd);while(getchar()!10);pack.typeTYPE_REGIST;write(client,pack,sizeof(pack));break;}case 2:{pack_t pack{0};printf(请输入账号);scanf(%s,pack.name);while(getchar()!10);printf(请输入密码);scanf(%s,pack.pswd);while(getchar()!10);pack.typeTYPE_LOGIN;write(client,pack,sizeof(pack));break;}
/* case 3:{pack_t pack{0};pack.typeTYPE_CHAT;scanf(%s %s,pack.tarname,pack.text);printf(tarname %s\n,pack.tarname);while(getchar()!10);write(client,pack,sizeof(pack));break;}
*/case 0:{break;}}}return 0;
}