wordpress网站关键词设置,wordpress 腾讯云插件,哈尔滨网络宣传与网站建设,郑州小程序定制公司项目背景
随着网络的发展#xff0c;电子商务的兴起和普及使得消费者越来越倾向于通过互联网购买商品和服务#xff0c;越来越多的传统零售商和新兴企业转向在线销售以满足消费者的需求#xff0c;个成功的在线商城项目背景包括对市场需求、竞争环境、技术和平台选择、商业…项目背景
随着网络的发展电子商务的兴起和普及使得消费者越来越倾向于通过互联网购买商品和服务越来越多的传统零售商和新兴企业转向在线销售以满足消费者的需求个成功的在线商城项目背景包括对市场需求、竞争环境、技术和平台选择、商业模式和目标、以及用户体验和功能需求的全面理解和分析越来越多的传统零售商和新兴企业转向在线销售以满足消费者的需求所以有了在线商城项目。
项目功能
该服务端有四级页面第一级为用户的用户名以及和密码的输入以及登录。第二级为用户模糊输入自己所需要商品的模糊名字后服务端将与其相关的商品罗列出来。第三级是服务器罗列出所有的相关商品用户可以点击商品的到其具体信息。第四级是服务器输出的具体商品的信息。在每个界面用户都可以搜索。
项目框架
主要模块:main函数数据库查询模块四个html文件模块多任务服务器创建模块。用户访问网页:用户直接访问服务器ip语言:hteml语言以及c语言编码结构:makefile多文件编码
项目模块分析介绍
多任务服务器担架:用多进程搭建可供大批用户访问的服务器。
Html文件:构造网页画面以及美好网页
数据库查询模块:用户查询时调用查询数据库的函数将库中相关信息导出。
Main:执行函数。
购买模块:设计到交易有大量风险略。
商品概述:数据库信息的导出。
Log将访问服务器的用户信息记录下来。
项目流程图及介绍 项目交互的函数口和数据类型 typedef struct http_req
{ char url[512]; char method[32]; char content[1024];
}HTTP_REQ_t;用于解析用户发出的请求
char good[50][1024]将遍历数据库得到的物品名存入good中。
int good_num 定义目标模糊查询的物品数量访问html文件时需要使用
int recv_http_request(int connfd,char *http_buff,int maxnum)接受用户发送的需求为main函数的主要函数之一。
int prase_http_request(char *http_buff, HTTP_REQ_t *req):解析用户的命令。
int send_http_response_head(int connfd);发送用户需要的数据
unsigned char FromHex(unsigned char x)
int urlDecode( char* dest, const char* src):解析用户查询汉字时的乱码。
Connfd通讯字贯穿整个项目。
main:
#include ../head.h
#include http.h
#include log.h
int sock_Init(const char *ip,unsigned short port)
{int sockfd socket(AF_INET,SOCK_STREAM,0);if(sockfd -1){perror(fial socket);return -1;}int val 1;setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, val, sizeof(val));struct sockaddr_in ser;ser.sin_family AF_INET;ser.sin_port htons(port);ser.sin_addr.s_addr inet_addr(ip);int ret bind(sockfd,(struct sockaddr *)ser,sizeof(ser));if(ret -1){perror(fail bind);return -1;}ret listen(sockfd,100);if(ret -1){perror(fail listen);return -1;}return sockfd;}int main()
{HTTP_REQ_t req;char http_buff[1024] {0};int sockfd sock_Init(192.168.1.150,8080);if(sockfd -1){perror(fail sock_Init);return -1;}struct sockaddr_in cli;socklen_t addrlen sizeof(cli);struct sockaddr_in ser;while(1){init_log();pid_t pid fork();if(pid 0){memset(http_buff,0,1024);int connfd accept(sockfd,(struct sockaddr*)cli,addrlen);if(connfd -1){perror(accept fail);return -1;}write_log(inet_ntoa(cli.sin_addr));// fclose(log_g.fp);recv_http_request(connfd,http_buff,sizeof(http_buff));printf(\n\n\n\n); printf(http_buff %s\n,http_buff);printf(\n\n\n\n); int ret prase_http_request(http_buff,req);printf(url %s\n,req.url);printf(method %s\n,req.method);printf(content %s\n,req.content);send_http_response(connfd,req);close(connfd);}else if(pid 0){memset(http_buff,0,1024);int connfd accept(sockfd,(struct sockaddr*)cli,addrlen);if(connfd -1){perror(accept fail);return -1;}write_log(inet_ntoa(cli.sin_addr));// fclose(log_g.fp);recv_http_request(connfd,http_buff,sizeof(http_buff));printf(\n\n\n\n); printf(http_buff %s\n,http_buff);printf(\n\n\n\n); int ret prase_http_request(http_buff,req);printf(url %s\n,req.url);printf(method %s\n,req.method);printf(content %s\n,req.content);send_http_response(connfd,req);close(connfd); }}return 0;
}
http:
#include ../head.h
#include http.h
char good[50][1024];
int good_num 0;
int html_num 0;
char *head !DOCTYPE htmlhtmlheadmeta charset\utf-8\title菜鸟教程(runoob.com)/title/headbody background \./wyy8.png\brbrbrbrbrbrbrbrbrcenter;
char *end center/body/html;
char INFO[5050] {0};
char html_failname[50][50] {0};
unsigned char FromHex(unsigned char x)
{if(0 x ) return -1;unsigned char y;if(xA xZ) y x-A10;else if(xa x z) y x-a10;else if(x0 x9) y x-0;return y;
}int urlDecode( char* dest, const char* src)
{if(NULL src || NULL dest){return -1;}int len strlen(src);int i 0 ;for(i 0 ;ilen;i){if( src[i]) strcat(dest,);else if(%src[i]){//if(i2len)return -1;unsigned char high FromHex((unsigned char)src[i]);unsigned char low FromHex((unsigned char)src[i]);unsigned char temp high*16 low;char temp2[5]{0};sprintf(temp2,%c,temp);strcat(dest , temp2);}}return 0;
}
int html_write(char *html_failname,char *good_content)
{int fp open(html_failname,O_RDWR|O_TRUNC|O_CREAT,0777);if(fp -1){perror(fail open1);return -1;}// printf(1111111111111111\n);write(fp,head,strlen(head));// printf(ccccontent %s\n,good_content);write(fp,good_content,strlen(good_content));write(fp,end,strlen(end));close(fp);
}int callback(void *arg,int column ,char **value,char **title)
{char info[1024] {0};sprintf(html_failname[html_num],./res/userdoend%d.html,html_num);sprintf(info,a href\%s\img src\%s\,width\150\ height\150\/a\n,html_failname[html_num],value[19]);// printf(value[17] %s\n,value[18]);html_write(html_failname[html_num],value[18]);html_num;strcat(INFO,info);return 0;
}int find_information(char *targe)
{sqlite3 *pdb ;char tmp_buff[1024] {0};int ret sqlite3_open(123.db,pdb);if(ret ! SQLITE_OK){printf(sqlite 3 open fail:%s\n,sqlite3_errmsg(pdb));return -1;}strcat(INFO,head);sprintf(tmp_buff,select * from goods where goods_name like \%%%s%%\;,targe);printf(targe %s\n,targe);printf(%s\n,tmp_buff);ret sqlite3_exec(pdb,tmp_buff,callback,NULL,NULL);if(ret ! SQLITE_OK){printf(sqlite3 callback fail :%s\n,sqlite3_errmsg(pdb));sqlite3_close(pdb);return -1;}strcat(INFO,end);html_num 0;sqlite3_close(pdb);
}int recv_http_request(int connfd,char *http_buff,int maxnum)
{memset(http_buff,0,maxnum);ssize_t size recv(connfd,http_buff,maxnum,0);if(size 0){perror(fail recv);return -1;}printf(http_buff %s\n,http_buff);return 0;
}
int prase_http_request(char *http_buff, HTTP_REQ_t *req)
{char *p strtok(http_buff, );if(p NULL){return -1;}strcpy(req-method,p);char *q strtok(NULL, );if(q NULL){return -1;}strcpy(req-url,q);char *t strtok(NULL,\0);if(t NULL){return -1;}t strstr(t,\r\n\r\n);strcpy(req-content,t4);return 0;
}
int send_http_response_head(int connfd)
{char *phead HTTP/1.1 200 OK\r\nContent-Type: text/html;charsetutf-8\r\nServer: my-web-server\r\n Connection: close\r\n\r\n;ssize_t size send(connfd,phead,strlen(phead),0);if(size 0){perror(send fail);return -1;}
}int send_file(int connfd,char *filename)
{int fd open(filename,O_RDONLY);if(fd -1){perror(open fail);return -1;}char buff[1024] {0};while(1){memset(buff,0,1024);ssize_t size read(fd,buff,1024);if(size 0){break;}send(connfd,buff,size,0);}close(fd);
}int do_filename(char *filename)
{int fp open(filename,O_WRONLY|O_TRUNC|O_CREAT,0777);if(fp -1){perror(fail open1);return -1;}write(fp,INFO,strlen(INFO));memset(INFO,0,5050);close(fp);
}
int send_http_response(int connfd,HTTP_REQ_t *req)
{char tmp_buff[1024] {0};char filename[1024] {0};memset(tmp_buff,0,1024);memset(filename,0,1024);send_http_response_head(connfd);if(!strcmp(req-method,GET)){ if(!strcmp(req-url,/)){strcpy(filename,./res/userin.html);}else if(strstr(req-url ,.png) || strstr(req-url , .jpg)||strstr(req-url,.png) ){sprintf(filename,.%s,req-url);}else if(strstr(req-url,.html)){sprintf(filename,.%s,req-url);}}else if(!strcmp(req-method,POST)){ if(strstr(req-content,user)){ char *p strstr(req-content,user);p p5;if(!strcmp(p,yuanjiaqingpasswordaaa)){sprintf(filename,./res/%s,req-url);}}else if(strstr(req-content,words)){char *q strstr(req-content,words);q q6;urlDecode(tmp_buff,q);find_information(tmp_buff);printf(INFO %s\n,INFO);sprintf(filename,./res/%s,req-url);do_filename(filename);} }printf( ---%s\n,filename);send_file(connfd,filename);memset(filename,0,1024);return 0;
}
log
#include time.h
#include sys/stat.h
#include sys/types.h#include log.hLOG_T log_g;int init_log(void)
{char filename[512] {0};time_t sec;mkdir(./LOG, 0777);//Log20240525.txttime(sec);struct tm *pt localtime(sec);log_g.tim *pt;sprintf(filename, ./LOG/Log%d%02d%02d.txt, pt-tm_year1900, pt-tm_mon1, pt-tm_mday);log_g.fp fopen(filename, a);if (NULL log_g.fp){printf(fail fopen log\n);return -1;}return 0;
}int write_log(char *aa)
{char buff[1024] {0};time_t sec;time(sec); struct tm *pt localtime(sec);//新的一天创建新的日志文件if (pt-tm_mday ! log_g.tim.tm_mday){deinit_log();init_log();}fprintf(log_g.fp, [%d-%02d-%02d %02d:%02d:%02d][%s] \n,pt-tm_year1900, pt-tm_mon1, pt-tm_mday, pt-tm_hour,pt-tm_min,pt-tm_sec, aa);fflush(log_g.fp);fclose(log_g.fp);return 0;
}void deinit_log()
{if (log_g.fp ! NULL){fclose(log_g.fp);}
}