网站如何自己做优化,自助建站系统免费加盟,怎么做网站编辑,杭州网站设计渠道目录
一、功能要求
服务器
用户客户端
二、演示效果
1.登录、注册功能
2. 查单词功能
3.查看历史纪录功能
三、项目代码
1.头文件
2.服务器
3.用户端
一、功能要求 仿照云词典的原理#xff0c;实现云词典功能#xff0c;用户可以查询输入的单词的英文解释实现云词典功能用户可以查询输入的单词的英文解释也可以查看历史记录。 服务器 处理客户端的请求并将数据存入数据库中客户端请求的数据从数据库进行获取服务器转发给客户端。 用户客户端 实现账号的注册、登录功能当登录成功时可以查单词、查看历史记录等功能。 二、演示效果
1.登录、注册功能 2. 查单词功能 3.查看历史纪录功能 三、项目代码
1.头文件
#include stdio.h
#include stdlib.h
#include unistd.h
#include string.h
#include sqlite3.h
#include signal.h
#include time.h
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#include sys/select.hstruct word_msg
{char word[20]; // 单词char parse[256]; // 含义
};typedef struct
{int acceptfd; // 链接客户端unsigned char type; // 功能类型 R:注册 L:登录 Q:查询 H:历史记录char name[32]; // 用户名char password[32]; // 密码char buf[1024]; // 调试信息struct word_msg msgg; // 单词信息
} MSG;
2.服务器
#include head.hfd_set readfds, tempfds;
sqlite3 *db;
MSG msg;void zhuce(MSG *msg); // 注册
void denglu(MSG *msg); // 登录
void chaxun(MSG *msg); // 查询
void lishi(MSG *msg); // 历史int main(int argc, char *argv[])
{if (argc ! 2){printf(用法port\n);return -1;}int sockfd socket(AF_INET, SOCK_STREAM, 0);printf(sorkfd%d\n, sockfd);struct sockaddr_in saddr, caddr;saddr.sin_family AF_INET;saddr.sin_port htons(atoi(argv[1]));saddr.sin_addr.s_addr INADDR_ANY;socklen_t addrlen sizeof(saddr);if (bind(sockfd, (struct sockaddr *)saddr, addrlen) 0){perror(bind失败);close(sockfd);return -1;}printf(bind成功\n);if (listen(sockfd, 7) 0){perror(lisren失败);close(sockfd);return -1;}printf(listen成功\n);// 打开数据库if (sqlite3_open(./yuncidian.db, db) 0){printf(打开数据库失败: %s\n, sqlite3_errmsg(db));return -1;}FD_ZERO(readfds);FD_ZERO(tempfds);FD_SET(sockfd, readfds);int max sockfd;while (1){tempfds readfds;int ret select(max 1, tempfds, NULL, NULL, NULL);if (ret -1){perror(select失败);close(sockfd);return -1;}if (FD_ISSET(sockfd, tempfds)){int acceptfd accept(sockfd, (struct sockaddr *)caddr, addrlen);if (acceptfd 0){perror(accept失败\n);return -1;}printf(客户端ip%s\t 端口号%d\n, inet_ntoa(caddr.sin_addr), ntohs(caddr.sin_port));FD_SET(acceptfd, readfds);if (max acceptfd){max acceptfd;}}for (int i sockfd 1; i max; i){if (FD_ISSET(i, tempfds)){int ret recv(i, msg, sizeof(msg), 0);msg.acceptfd i;if (ret 0){perror(recv失败);close(sockfd);return -1;}else if (ret 0){printf(客户端acceptfd%d退出\n, i);FD_CLR(i, readfds);close(i);while (!FD_ISSET(max, readfds)){max--;}}else{printf(%c\n, msg.type);switch (msg.type){case R:zhuce(msg);break;case L:denglu(msg);break;case Q:chaxun(msg);break;case H:lishi(msg);break;default:break;}}}}}return 0;
}void zhuce(MSG *msg) // 注册
{memset(msg-buf, 0, sizeof(msg-buf));char *errmsg NULL;char sql[128];char check_sql[128];char **result NULL;int rows, columns;while (1){ // 检查用户名是否已存在sprintf(check_sql, select * from user where name%s;, msg-name);if (sqlite3_get_table(db, check_sql, result, rows, columns, errmsg) ! 0){sprintf(msg-buf, 查询失败: %s, errmsg);break;}if (rows 0){sprintf(msg-buf, 用户名已存在);break;}// 执行插入操作sprintf(sql, insert into user values(%s,%s);, msg-name, msg-password);if (sqlite3_exec(db, sql, NULL, NULL, errmsg) ! 0){sprintf(msg-buf, 注册失败: %s, errmsg);break;}else{printf(%s\n, sql);sprintf(msg-buf, 注册成功);break;}}send(msg-acceptfd, msg-buf, sizeof(msg-buf), 0);
}
void denglu(MSG *msg) // 登录
{memset(msg-buf, 0, sizeof(msg-buf));char sql[128];char *errmsg NULL;char **result NULL;int rows, columns;while (1){sprintf(sql, select * from user where name %s and password %s;, msg-name, msg-password);// 执行 SQL 查询int sqlget sqlite3_get_table(db, sql, result, rows, columns, errmsg);if (sqlget ! 0){sprintf(msg-buf, sqlite3_get_table错误%s, errmsg);break;}else if (rows 0){sprintf(msg-buf, 登录成功);break;}else{sprintf(msg-buf, 登录失败);break;}}send(msg-acceptfd, msg-buf, strlen(msg-buf), 0);
}
void chaxun(MSG *msg) // 查询
{memset(msg-buf, 0, sizeof(msg-buf));char sql[1024];char sql1[1024];char *errmsg NULL;char **result NULL;int rows, columns;time_t t;struct tm *timeinfo;char date[100];time(t);timeinfo localtime(t);while (1){snprintf(date, sizeof(date), %d-%d-%d %d:%d:%d, timeinfo-tm_year 1900, timeinfo-tm_mon 1, timeinfo-tm_mday, timeinfo-tm_hour, timeinfo-tm_min, timeinfo-tm_sec);snprintf(sql, sizeof(sql), select parse from dic where word%s;, msg-msgg.word);snprintf(sql1, sizeof(sql1), insert into history values (%s,%s,%s);, msg-name, date, msg-msgg.word);if (sqlite3_exec(db, sql1, NULL, NULL, errmsg) ! 0){sprintf(msg-buf, 放入历史记录失败: %s, errmsg);break;}printf(%s\n, sql1);int rc sqlite3_get_table(db, sql, result, rows, columns, errmsg);if (rc ! 0){sprintf(msg-buf, 查询失败: %s, errmsg);}else{if (rows 0){for (int i 1; i rows; i){strcat(msg-buf, 查询到的单词信息:);strcat(msg-buf, result[i * columns]);strcat(msg-buf, \n);}printf(%s\n, sql);break;}else{strcpy(msg-buf, 没有找到该单词信息.);break;}}}send(msg-acceptfd, msg-buf, strlen(msg-buf) - 1, 0);
}
void lishi(MSG *msg) // 历史
{printf(%s\n, msg-name);char sql[1100];char *errmsg NULL;char **result NULL;int rows, columns;while (1){sprintf(sql, select date,word from history where name%s;, msg-name);memset(msg-buf, 0, sizeof(msg-buf));int rc sqlite3_get_table(db, sql, result, rows, columns, errmsg);if (rc ! 0){sprintf(msg-buf, 查询历史记录失败: %s, errmsg);break;}else{if (rows 0){for (int i 1; i rows; i){strcat(msg-buf, 查询到的信息:);for (int j 0; j columns; j){strcat(msg-buf, result[i * columns j]);strcat(msg-buf, );}strcat(msg-buf, \n);}break;}else{strcpy(msg-buf, 该历史记录不存在);break;}}}send(msg-acceptfd, msg-buf, strlen(msg-buf) - 1, 0);
}
3.用户端
#include head.hint flag 0;
fd_set readfds, tempfds;
sqlite3 *db;
MSG msg;void denglujiemian(); // 登录界面
void yuncidianjiemian(); // 云词典界面
void zhuce(MSG *msg); // 注册
void denglu(MSG *msg); // 登录
void chaxun(MSG *msg); // 查询
void lishi(MSG *msg); // 历史int main(int argc, char *argv[])
{if (argc ! 2){printf(用法port\n);return -1;}int sockfd socket(AF_INET, SOCK_STREAM, 0);if (sockfd 0){perror(socket err);return -1;}struct sockaddr_in saddr;saddr.sin_family AF_INET;saddr.sin_port htons(atoi(argv[1]));saddr.sin_addr.s_addr inet_addr(192.168.50.214);socklen_t addrlen sizeof(saddr);if (connect(sockfd, (struct sockaddr *)saddr, addrlen) 0){perror(connect err);return -1;}printf(connect 成功\n);while (1){memset(msg.buf, 0, sizeof(msg.buf));msg.acceptfd sockfd;if (flag 0){denglujiemian(); // 登录界面}if (flag 1){yuncidianjiemian(); // 云词典界面}printf(请输入选项: );scanf( %c, msg.type);printf(msg.type:%c\n, msg.type);switch (msg.type){case R:zhuce(msg); // 注册break;case L:denglu(msg); // 登录break;case Q:chaxun(msg); // 查询break;case H:lishi(msg); // 历史break;case D:flag 0; // 返回登录菜单break;default:break;}}// 6.关闭close(sockfd);return 0;
}void denglujiemian() // 登录界面
{printf(************************************\n);printf(* R: register L: login D: quit *\n);printf(************************************\n);
}
void yuncidianjiemian() // 云词典界面
{printf(***********************************************\n);printf(* Q: query_word H: history_record D: quit *\n);printf(***********************************************\n);
}void zhuce(MSG *msg) // 注册
{memset(msg-name, 0, sizeof(msg-name));memset(msg-password, 0, sizeof(msg-password));printf(请输入用户名:);scanf(%s, msg-name);getchar();printf(请输入用户密码:);scanf(%s, msg-password);getchar();send(msg-acceptfd, msg, sizeof(*msg), 0);recv(msg-acceptfd, msg-buf, sizeof(msg-buf), 0);printf(%s\n, msg-buf);
}
void denglu(MSG *msg) // 登录
{while (1){memset(msg-name, 0, sizeof(msg-name));memset(msg-password, 0, sizeof(msg-password));printf(请输入用户名:);scanf(%s, msg-name);getchar();printf(请输入用户密码:);scanf(%s, msg-password);getchar();send(msg-acceptfd, msg, sizeof(*msg), 0);recv(msg-acceptfd, msg-buf, sizeof(msg-buf), 0);printf(%s\n, msg-buf);if (strcmp(msg-buf, 登录成功) 0){flag 1;break;}if (strcmp(msg-buf, 登录失败) 0){continue;}}
}
void chaxun(MSG *msg) // 查询
{while (1){memset(msg-buf, 0, sizeof(msg-buf));memset(msg-msgg.word, 0, sizeof(msg-msgg.word));printf(请输入要查询的单词(输入退出查询));scanf(%s, msg-msgg.word);getchar();if (strcmp(msg-msgg.word, #) 0){break;}else{send(msg-acceptfd, msg, sizeof(*msg), 0);recv(msg-acceptfd, msg-buf, sizeof(msg-buf), 0);printf(%s\n, msg-buf);continue;}}
}
void lishi(MSG *msg) // 历史
{send(msg-acceptfd, msg, sizeof(*msg), 0);recv(msg-acceptfd, msg-buf, sizeof(msg-buf), 0);printf(%s\n, msg-buf);
} 文章转载自: http://www.morning.wwthz.cn.gov.cn.wwthz.cn http://www.morning.tngdn.cn.gov.cn.tngdn.cn http://www.morning.qdlr.cn.gov.cn.qdlr.cn http://www.morning.sgrwd.cn.gov.cn.sgrwd.cn http://www.morning.yjfmj.cn.gov.cn.yjfmj.cn http://www.morning.cpwmj.cn.gov.cn.cpwmj.cn http://www.morning.bnrff.cn.gov.cn.bnrff.cn http://www.morning.ykrss.cn.gov.cn.ykrss.cn http://www.morning.qhln.cn.gov.cn.qhln.cn http://www.morning.zlxkp.cn.gov.cn.zlxkp.cn http://www.morning.mcjrf.cn.gov.cn.mcjrf.cn http://www.morning.zxqqx.cn.gov.cn.zxqqx.cn http://www.morning.plnry.cn.gov.cn.plnry.cn http://www.morning.cmhkt.cn.gov.cn.cmhkt.cn http://www.morning.trrrm.cn.gov.cn.trrrm.cn http://www.morning.dpnhs.cn.gov.cn.dpnhs.cn http://www.morning.bsplf.cn.gov.cn.bsplf.cn http://www.morning.wckrl.cn.gov.cn.wckrl.cn http://www.morning.ksjmt.cn.gov.cn.ksjmt.cn http://www.morning.wtnwf.cn.gov.cn.wtnwf.cn http://www.morning.dshkp.cn.gov.cn.dshkp.cn http://www.morning.yfqhc.cn.gov.cn.yfqhc.cn http://www.morning.bypfj.cn.gov.cn.bypfj.cn http://www.morning.hhzdj.cn.gov.cn.hhzdj.cn http://www.morning.bpmtl.cn.gov.cn.bpmtl.cn http://www.morning.kjgrg.cn.gov.cn.kjgrg.cn http://www.morning.lmpfk.cn.gov.cn.lmpfk.cn http://www.morning.bqrd.cn.gov.cn.bqrd.cn http://www.morning.qhjkz.cn.gov.cn.qhjkz.cn http://www.morning.syqtt.cn.gov.cn.syqtt.cn http://www.morning.mcqhb.cn.gov.cn.mcqhb.cn http://www.morning.yrwqz.cn.gov.cn.yrwqz.cn http://www.morning.kpbn.cn.gov.cn.kpbn.cn http://www.morning.qfqld.cn.gov.cn.qfqld.cn http://www.morning.jrgxx.cn.gov.cn.jrgxx.cn http://www.morning.wmfny.cn.gov.cn.wmfny.cn http://www.morning.lbcbq.cn.gov.cn.lbcbq.cn http://www.morning.zyrcf.cn.gov.cn.zyrcf.cn http://www.morning.tgfsr.cn.gov.cn.tgfsr.cn http://www.morning.alive-8.com.gov.cn.alive-8.com http://www.morning.srrrz.cn.gov.cn.srrrz.cn http://www.morning.clbzy.cn.gov.cn.clbzy.cn http://www.morning.ryxgk.cn.gov.cn.ryxgk.cn http://www.morning.uycvv.cn.gov.cn.uycvv.cn http://www.morning.qbzfp.cn.gov.cn.qbzfp.cn http://www.morning.nmrtb.cn.gov.cn.nmrtb.cn http://www.morning.pbzgj.cn.gov.cn.pbzgj.cn http://www.morning.phnbd.cn.gov.cn.phnbd.cn http://www.morning.zyslyq.cn.gov.cn.zyslyq.cn http://www.morning.yhsrp.cn.gov.cn.yhsrp.cn http://www.morning.rmpkn.cn.gov.cn.rmpkn.cn http://www.morning.wwnb.cn.gov.cn.wwnb.cn http://www.morning.qzsmz.cn.gov.cn.qzsmz.cn http://www.morning.cbndj.cn.gov.cn.cbndj.cn http://www.morning.rylr.cn.gov.cn.rylr.cn http://www.morning.tfrmx.cn.gov.cn.tfrmx.cn http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn http://www.morning.jhwqp.cn.gov.cn.jhwqp.cn http://www.morning.ntffl.cn.gov.cn.ntffl.cn http://www.morning.nkdmd.cn.gov.cn.nkdmd.cn http://www.morning.wgqtj.cn.gov.cn.wgqtj.cn http://www.morning.gwhjy.cn.gov.cn.gwhjy.cn http://www.morning.rglzy.cn.gov.cn.rglzy.cn http://www.morning.bpmdn.cn.gov.cn.bpmdn.cn http://www.morning.mnbgx.cn.gov.cn.mnbgx.cn http://www.morning.ftmp.cn.gov.cn.ftmp.cn http://www.morning.qinhuangdjy.cn.gov.cn.qinhuangdjy.cn http://www.morning.gmwqd.cn.gov.cn.gmwqd.cn http://www.morning.qjsxf.cn.gov.cn.qjsxf.cn http://www.morning.qtqjx.cn.gov.cn.qtqjx.cn http://www.morning.wcjgg.cn.gov.cn.wcjgg.cn http://www.morning.rkqqf.cn.gov.cn.rkqqf.cn http://www.morning.mysmz.cn.gov.cn.mysmz.cn http://www.morning.ahscrl.com.gov.cn.ahscrl.com http://www.morning.c7512.cn.gov.cn.c7512.cn http://www.morning.skmpj.cn.gov.cn.skmpj.cn http://www.morning.ndtzy.cn.gov.cn.ndtzy.cn http://www.morning.hflrz.cn.gov.cn.hflrz.cn http://www.morning.npbkx.cn.gov.cn.npbkx.cn http://www.morning.cbynh.cn.gov.cn.cbynh.cn