Web服务器编程

news/2024/10/2 0:59:47

Web编程

Web编程.c

服务器应答格式:

服务器接收到浏览器的数据之后,需要判断GET/后面跟的网页是否存在,如果存在则请求成功,发送指定的指令,并发送文件内容给浏览器,如果不存在,则发送请求失败的指令


请求成功:

"HTTP/1.1 200 OK\r\n "   \
"Content-Type: text/html\r\n"  \
"\r\n";

请求失败

"HTTP/1.1 400 OK\r\n "   \"
"Content-Type: text/html\r\n"   \
"\r\n"   \
"<HTML><BOOY>File not found</BODY></HTML>"

案例

/*
#    Web编程
#    https://www.cnblogs.com/kencszqh
#
#    File Name:  Web_servicer.c
#    Created  :  2024-06-13
*/#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/wait.h>
#include <signal.h>
#include <errno.h>#define PATH "./xxxwork/"
#define N 128
#define ERR_LOG(errmsg)                                     \do                                                      \{                                                       \perror(errmsg);                                     \exit(1);                                            \} while (0)void *pthread_func(void *arg)
{int acceptfd = *(int *)arg;char buf[N] = {0};char head[] = "HTTP/1.1 200 OK\r\n"" Content-Type: text/html\r\n""\r\n ";char err[] = "HTTP/1.1 404 Not Found\r\n""Content-Type: text/html\r\n""\r\n""<html><body><h1>404 Not Found</h1></body></html>";// 接收浏览器通过HTTP协议发送的数据包if (recv(acceptfd, buf, N, 0) < 0){ERR_LOG("recv");}printf("%s\n", buf);// GET /index.html HTTP/1.1char filename[N] = {0};sscanf(buf, "GET /%s", filename); // sscanf()函数与空格结束,所以直接可以获取到文件名// 截取文件名后判段一下是否是HTTP/1.1if (strncmp(filename, "HTTP/1.1", strlen("http/1.1")) == 0){strcpy(filename, "index.html");}printf("filename:%s\n", filename);char path[N] = "PATH";// 通过解析出来的网页文件名,查找本地中有没有这个文件int fd;if ((fd = open(path, O_RDONLY)) < 0){// 如果文件不存在,则发生不存在对应的指令if (errno == ENOENT){if (send(acceptfd, err, strlen(err), 0) < 0){ERR_LOG("send");}close(acceptfd);pthread_exit(NULL);}else{ERR_LOG("open");}}// 如果文件存在,则发送文件内容if (send(acceptfd, head, strlen(head), 0) < 0){ERR_LOG("send");}// 读取文件内容,并发送给浏览器ssize_t n;char text[1024] = {0};while ((n = read(fd, text, sizeof(text))) > 0){if (send(acceptfd, text, n, 0) < 0){ERR_LOG("send");}}
}int main(int argc, char const *argv[])
{if (argc != 3){fprintf(stderr, "Usage:%s [ip] [port]\n", argv[0]);exit(1);}int sockfd, acceptfd;struct sockaddr_in serveraddr, clientaddr;socklen_t addrlen = sizeof(serveraddr);// 1.创建套接字if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ERR_LOG("socket");}// 2.绑定serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(atoi(argv[2]));serveraddr.sin_addr.s_addr = inet_addr(argv[1]);if (bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0){ERR_LOG("bind");}// 3.监听if (listen(sockfd, 5) < 0){ERR_LOG("listen");}// 4.接受客户端连接while (1){if ((acceptfd = accept(sockfd, (struct sockaddr *)&clientaddr, &addrlen)) < 0){ERR_LOG("accept");}printf("client ip:%s,port:%d\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));pthread_t thread;if (pthread_create(&thread, NULL, pthread_func, &acceptfd) != 0){ERR_LOG("pthread_create");}pthread_detach(thread);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/44746.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

MongoDB文档存储

非关系型数据库存储NoSQL,全称 Not Only SQL,意为不仅仅是 SQL,泛指非关系型数据库。NoSQL 是基于键值对的,而且不需要经过 SQL 层的解析,数据之间没有耦合性,性能非常高。 非关系型数据库又可细分如下。键值存储数据库:代表有 Redis、Voldemort 和 Oracle BDB 等。 列存…

SSH Samba

1. SSH的安装与配置 Secure Shell (SSH) 是一种网络协议,允许用户通过加密的通道安全地访问另一台计算机。SSH广泛用于远程登录系统、管理服务器和进行安全数据传输。在Ubuntu这样的Linux发行版中,安装和配置SSH服务是一项常见且相对简单的任务。以下是在Ubuntu系统上安装和配…

nmap官方文档

名称 nmap — 网络探测工具和安全/端口扫描器 理论 渗透测试流程以及每个阶段需要做的事情 与客户确认测试范围——获得授权书——信息收集——漏洞挖掘——漏洞利用——后渗透——痕迹清除——生成渗透测试报告 项目启动:事先与客户沟通,测试事项、获得授权、保密协议测试对…

使用cJSON库对JSON格式进行解析

JSON format基本概念 JSON是JavaScript Object Notation的简称,中文含义为“JavaScript 对象表示法”,它是一种数据交换的文本格式,而不是一种编程语言 它易于阅读和编写,并且易于机械解析和生成,常在Web开发中用于数据的格式和传输数据格式 对象 JSON 由两种数据结构组成…

【攻防演练】-- 蓝队复盘

攻防演练前期演练的意义:卡巴斯基实验室和B2B International调查报告曾指出,“IT安全中的人为因素:员工如何让企业更容易遭受攻击”,全球有40%的企业存在员工隐藏IT安全事故的情况。每年,有46%的IT安全事故是由企业员工造成的。 SolarWinds发布的网络安全调查报告显示,相比…

一些做过的生物遗传题

菜鸡 luyiming 也想变强的说。2020-山东 T23备注:第一部分题目讲的条件翻译过来就是 tsts 基因型是雌株,Ts_是雌雄同株。 (3) 第二问我自己的思考方法:注意到比例为两个 3:1,所以 Ts, ts 的分离是没啥问题的,不动。注意到我删掉雌雄其中之一的 A_ 配子,就变成了 [AT, At,…

Redis高级篇之最佳实践

Redis高级篇之最佳实践 今日内容Redis键值设计 批处理优化 服务端优化 集群最佳实践1、Redis键值设计 1.1、优雅的key结构 Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定:遵循基本格式:[业务名称]:[数据名]:[id] 长度不超过44字节 不包含特殊字符例如:我们的…

作业8:信息存储的层次与并行技术

作业8:信息存储的层次与并行技术 一. 单选题(共7题,70分)(单选题) 考虑为以下表达式生成代码 A=B+C ; D=E-F ; 在执行过程中不需要插入任何停顿周期就能够消除冲突的指令序列是( )。 A. B. C. D.​ 正确答案: C:;(单选题)目前存储系统中的主要矛盾是( ) A. 处理…