c linux服务器简单http server程序
来源:互联网 发布:java web 商城 编辑:程序博客网 时间:2024/06/06 20:48
#include<sys/socket.h>
#include<errno.h>
#include<netinet/in.h>
#include<string.h>
#include<stdio.h>
#define BUF_LEN 1028
#define SERVER_PORT 8888
//定义好的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);
//printf("read buf :\n %s\n", buf);
if(!strncmp(buf, "GET", 3))
{
char *file = buf + 4;
char *space = strchr(file, ' ');
if(space != NULL)//这个地方要处理一下,不然会core dump
{
*space = '\0';
}
else
{
strcpy(file, "");
}
//printf("file :\n %s\n", file);
http_send_file(file, sockfd);
}
else
{
//其他HTTP请求处理,如POST,HEAD等 。这里我们只处理GET
printf("unsupported request!\n");
return;
}
}
int 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);
}
return 0;
}
假设linux服务器内网ip为192.168.100.210,将文件保存为http-svr.c,上传至服务器 ,执行以下命令:
gcc -g -o http-svr http-svr.c
./http-svr
然后在本地浏览器访问http://192.168.100.210:8888/即可看到效果
0 0
- c linux服务器简单http server程序
- C#TCP服务器简单程序
- Python实现简单的http服务器程序
- Linux简单的http服务器:SimpleHTTPServer
- linux c 实现简易HTTP服务器
- linux c 简单端口扫描程序
- linux下简单的流服务器程序
- 简单的Linux客户-服务器网络程序
- 最简单服务器程序UDP(Linux)
- 简单c/s程序(Linux c)
- POCO::Net 简单的HTTP客户端,服务器程序
- 一个简单的java server服务器小程序
- linux c 实现简单版 ftp 服务器
- [linux] c 实现简单的web服务器
- 用C编写一个简单的、基本的http服务器
- 一个简单的零配置命令行HTTP服务器 - http-server (nodeJs)
- 一个简单的零配置命令行HTTP服务器 - http-server (nodeJs)
- 从零开始学写HTTP服务器(二)socket编程实现简单的http server
- java自定义annotation使用详解
- Unity3D开发——LeRunning角色选择界面制作
- 嵌套类,内部类,匿名内部类再学习
- HTTP报文详解
- 初步篇11算术运算符与算术表达式项目4玩数字
- c linux服务器简单http server程序
- Kth Largest Element in an Array -- leetcode
- Java Linux内核开发
- Linux strace命令
- 欢迎使用CSDN-markdown编辑器
- hdu1996汉诺塔VI
- Android-Volley网络通信框架(volley 例子:电影列表)
- uitextfiled 输入 过滤
- 大型分布式数据库集群的研究