C语言-写一个简单的Web服务器(二)

继续第二部分,本次我们研究如何解析前端(浏览器)发起的请求。

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
相关推荐
天若有情67316 小时前
新闻通稿 | 软件产业迈入“智能重构”新纪元:自主进化、人机共生与责任挑战并存
服务器·前端·后端·重构·开发·资讯·新闻
香香爱编程17 小时前
electron对于图片/视频无法加载的问题
前端·javascript·vue.js·chrome·vscode·electron·npm
apocelipes17 小时前
POSIX兼容系统上read和write系统调用的行为总结
linux·c语言·c++·python·golang·linux编程
冬夜戏雪17 小时前
【尚庭公寓152-157】[第6天]【配置阿里云号码认证服务】
运维·服务器
程序猿_极客17 小时前
【期末网页设计作业】HTML+CSS+JavaScript 蜡笔小新 动漫主题网站设计与实现(附源码)
前端·javascript·css·html·课程设计·期末网页设计
zl_vslam17 小时前
SLAM中的非线性优-3D图优化之轴角在Opencv-PNP中的应用(一)
前端·人工智能·算法·计算机视觉·slam se2 非线性优化
是苏浙17 小时前
零基础入门C语言之C语言实现数据结构之顺序表应用
c语言·数据结构·算法
CDwenhuohuo18 小时前
用spark-md5实现切片上传前端起node模拟上传文件大小,消耗时间
前端
阿桂有点桂18 小时前
React使用笔记(持续更新中)
前端·javascript·react.js·react
自由日记18 小时前
实例:跳动的心,火柴人
前端·css·css3