char* p = strstr(revdata, "GET /");//解析http请求 if (p == NULL) { p = fopen("404.html", "rb"); continue; } p += 5; char* q = strstr(p, " "); *q = '\0'; printf("\nurl:%s\n", p); //strcat(p - 5, p); printf("文件路径:%s\n", strcat(rootpath,p)); strcpy(rootpath, "D:/Web server/"); char* filename = p; if (strcmp(p, "favicon.ico") == 0) continue;代码含义
时间: 2024-01-12 07:02:51 浏览: 72
EDA/PLD中的利用strstr和sscanf解析GPS信息
这段代码的作用是解析HTTP请求中的URL,并构造出需要访问的文件路径。具体来说:
```
char* p = strstr(revdata, "GET /");//解析http请求
```
这一句代码使用了C语言中的字符串函数strstr,查找字符串revdata中第一次出现"GET /"的位置,并返回该位置的指针。如果没找到,则返回NULL指针。这里的revdata是从客户端接收到的HTTP请求报文。
```
if (p == NULL) {
p = fopen("404.html", "rb");
continue;
}
```
如果没有找到"GET /",则说明这个HTTP请求不是一个有效的请求,因此返回一个404错误页面。这里使用fopen函数打开名为"404.html"的文件,如果打开成功,返回指向该文件的文件指针;否则返回NULL指针。如果出现了这种情况,代码会跳过后面的处理,直接开始下一次循环。
```
p += 5;
```
这一句代码将p指针向后移动5个字符,跳过"GET /"这个字符串,指向URL的起始位置。
```
char* q = strstr(p, " ");
*q = '\0';
```
这一句代码查找p指针后面第一次出现的空格,并将其替换为字符串结束符'\0'。这样,p指针就指向了URL字符串的结尾,q指针指向了URL中第一个空格的位置。
```
printf("\nurl:%s\n", p);
```
这一句代码使用printf函数输出URL字符串,方便调试。
```
printf("文件路径:%s\n", strcat(rootpath,p));
```
这一句代码将URL字符串拼接到服务器根目录路径rootpath之后,形成完整的文件路径。使用strcat函数实现字符串拼接。这里的rootpath路径是服务器设置的根目录路径。
```
strcpy(rootpath, "D:/Web server/");
```
这一句代码将rootpath路径重新设置为服务器的根目录路径,为下一次文件访问做准备。
```
char* filename = p;
if (strcmp(p, "favicon.ico") == 0) continue;
```
这两行代码将p指针指向的URL字符串赋值给filename指针,用于后面访问文件时使用。如果URL字符串是"favicon.ico",则直接跳过,因为这是一个浏览器请求的小图标,与服务器的主要业务无关。
阅读全文