Linux下HTTP Server
来源:互联网 发布:数据分析师是什么 编辑:程序博客网 时间:2024/05/23 01:59
想在Linux下实现一个简单的web Server并不难。一个最简单的HTTP Server不过是一个高级的文件服务器,不断地接收客户端(浏览器)发送的HTTP请求,解析请求,处理请求,然后像客户端回送数据。在大多是情况下,(GET、POST命令),服务求回传给客户端的都是文件(HTML 文档, 图片,javascript脚本等等)。
下面是一个极简单的HTTP Server的demo,虽然只处理GET请求并发送单一文件,但基本展示了web server的框架。我的例子试图将功能和结构做到最精简,这样,一个http server的基本结构,便一目了然。
#include<sys/socket.h>#include<errno.h>#include<netinet/in.h>#include<string.h>#include<stdio.h>#define BUF_LEN 1028#define SERVER_PORT 8080//定义好的html页面,实际情况下web server基本是从本地文件系统读取html文件 const static char http_error_hdr[] = "HTTP/1.1 404 Not Found\r\nContent-type: text/html\r\n\r\n";const static char http_html_hdr[] = "HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n";const static char http_index_html[] = "<html><head><title>Congrats!</title></head>""<body><h1>Welcome to our HTTP server demo!</h1>""<p>This is a just small test page.</body></html>";//解析到HTTP请求的文件后,发送本地文件系统中的文件//这里,我们处理对index文件的请求,发送我们预定好的html文件//呵呵,一切从简! int http_send_file(char *filename, int sockfd){ if(!strcmp(filename, "/")){ //通过write函数发送http响应报文;报文包括HTTP响应头和响应内容--HTML文件 write(sockfd, http_html_hdr, strlen(http_html_hdr)); write(sockfd, http_index_html, strlen(http_index_html)); } else{ // 文件未找到情况下发送404error响应 printf("%s:file not find!\n",filename); write(sockfd, http_error_hdr, strlen(http_error_hdr)); } return 0;}//HTTP请求解析 void serve(int sockfd){char buf[BUF_LEN];read(sockfd, buf, BUF_LEN);if(!strncmp(buf, "GET", 3)){char *file = buf + 4; char *space = strchr(file, ' '); *space = '\0'; http_send_file(file, sockfd);}else{ //其他HTTP请求处理,如POST,HEAD等 。这里我们只处理GET printf("unsupported request!\n");return;}}void main(){int sockfd,err,newfd;struct sockaddr_in addr;//建立TCP套接字 sockfd = socket(AF_INET, SOCK_STREAM, 0);if(sockfd < 0){perror("socket creation failed!\n");return;}memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;//这里要注意,端口号一定要使用htons先转化为网络字节序,否则绑定的实际端口//可能和你需要的不同 addr.sin_port = htons(SERVER_PORT);addr.sin_addr.s_addr = INADDR_ANY;if(bind(sockfd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in))){perror("socket binding failed!\n");return;}listen(sockfd, 128);for(;;){ //不间断接收HTTP请求并处理,这里使用单线程,在实际情况下考虑到效率一般多线程 newfd = accept(sockfd, NULL, NULL);serve(newfd);close(newfd);}}不到80行代码,就可以实现一个超简单的http服务器了。
- Linux下HTTP Server
- Linux下HTTP Server
- Linux下HTTP Server
- Linux下安装apache http server 过程
- CentOS Linux下配置svn HTTP server
- Linux 下配置Apache Http Server
- ubuntu linux下安装PHP, Apache HTTP Server
- Linux下Apache HTTP Server 2.4.20安装
- A HTTP Proxy Server Code under Linux. Linux 下 HTTP 代理服务器代码
- linux 下vnc server
- linux下vnc server
- Linux Was6卸载旧包后部署新包,需要在Http Server下重新设置映射
- Linux下安装Apache Http Server 的配置+一些错误信息的解决方法
- windows 下的apache http server 配置
- Ubuntu下安装配置Apache http server
- Ubuntu下创建简单的Http server
- ubuntu下安装apache http server
- Windows下Apache HTTP Server安装
- 用C#的方式开发Silverlight
- PCB设计中的接地问题
- PCB布线的常见规则
- 柱形图
- Eclipse RCP中的进度条
- Linux下HTTP Server
- vc6.0 vs vs2005
- VIM 按鍵說明
- PCB技巧
- 创建角色,用户,权限
- Linux RAMDisk 源码分析
- zoj 3468 Dice War
- 新手设计PCB注意事项
- hdu 3920 Clear All of Them I