经过以上几次的构建,我们基本上已经构建出来了一个简易的Web服务器,接下来将使用查询从文本中查询我们的问题。
查询结果
在这里我设置了一个page全局参数用来记录是哪个页面,避免和登录页面进行冲突重复查询(大家可以自行优化)。
将html中的头拼接到之前写的html页面上去,由于要使用打字机效果使用了typed.js插件,从网络上连接效率太低,我采用启动一个tomcat将插件放入本地使用。
tips:尝试直接放入本地,但是浏览器拒绝这样使用。
if (strcmp("9", page) != 0) {char ans[1024*5];memset(ans,0, sizeof(ans));read_answer(ans, question);strcat(body, "<div class='box'></div>");strcat(body, "<script src='http://localhost:8090/cc/typed.min.js'></script>");strcat(body, "<script>let typed = new Typed('.box', {strings: ['");strcat(body, ans);strcat(body, "'],typeSpeed: 120,});</script>");
}
send(client_socket, headers, strlen(headers), 0);
send(client_socket, html_header, strlen(html_header), 0);
send(client_socket, body, strlen(body), 0);
printf("[服务器] 响应完成......\n");close(client_socket);
printf("[服务器] ---------------断开与客户端(浏览器的连接)------------------\n\n");
void read_answer(char *line, char *key) {FILE *fp = NULL;char ans_line[100];fp = fopen("D:/cprojects/ai_x/data.txt", "r");int step = 0;int c = 0;while ((c = fgetc(fp)) != EOF) {if (c == '\r' || c == '\n') {ans_line[step++] = '!';continue;}ans_line[step + 1] = '\0';ans_line[step++] = (char) c;}fclose(fp);char *x = strtok(ans_line, "!");int index =0;while (x != NULL) {printf("第%d行--->%s\n", index++,x);if(strstr(x,key)){strcpy(line,x);break;}x = strtok(NULL, "!");}printf("查询到的结果===>%s\n", line);}