继续第二部分,本次我们研究如何解析前端(浏览器)发起的请求。
tips: 本次只处理前端GET方式请,即标签,或者从浏览器直接发起请求。
解析客户端请求
此次项目获取的页面GET请求。
c
char req[100];
memset(req, 0, sizeof(req));
get_method_req(req_buffer, req);
url_decode(req);
printf("[服务器] 来自客户端的请求==>%s\n", req);
定义字符数组存储请求数据
c
char req[100];
memset(req, 0, sizeof(req));
将请求数据写入req数组
c
void get_method_req(char *req_buff, char *req);
void get_method_req(char *req_buff, char *req) {
int count = 0;
for (int i = 6; i < strlen(buffer); i++) {
if (buffer[i] == ' ') {
break;
}
res[count++] = buffer[i];
}
res[count] = '\0';
}
将浏览器中的数据重新编码
浏览器会对中文进行编码,我们需要将其重新解码回中文形式。
c
int hex2dec(char c);
void url_decode(char url[]);
int hex2dec(char c) {
if ('0' <= c && c <= '9') {
return c - '0';
} else if ('a' <= c && c <= 'f') {
return c - 'a' + 10;
} else if ('A' <= c && c <= 'F') {
return c - 'A' + 10;
} else {
return -1;
}
}
void url_decode(char url[]) {
int i = 0;
int len = strlen(url);
int res_len = 0;
char res[100];
for (i = 0; i < len; ++i) {
char c = url[i];
if (c != '%') {
res[res_len++] = c;
} else {
char c1 = url[++i];
char c0 = url[++i];
int num = 0;
num = hex2dec(c1) * 16 + hex2dec(c0);
res[res_len++] = num;
}
}
res[res_len] = '\0';
strcpy(url, res);
}
运行结果
问题:如何关闭windows进程
如果在启动web服务器时出现以下问题
查询指定端口
netstat -aon | findstr 端口号
c
netstat -aon|findstr 9999
终止指定进程
taskkill /f /t /im 进程ID
shell
taskkill /f /t /im 10200