资源简介
使用C语言实现的io多路复用http服务器的一个简单例子,可以显示简单的图片文字等,内含makefile,所用到的图片和html,编译运行即可
代码片段和文件信息
/*****************************************************************
system:ubunt12.04
enviroment:gcc
date:20180724
author:xiancan.wang
*****************************************************************/
//for exit()
#include
//for stdin perro()
#include
#include
//socket
#include
#include
#include
#include
#include
#define MAXDATASIZE 1024
#define SRC_PATH “./data“
int fileordirExist(char* fpath)
{
struct stat filestat;
printf(“fpath:%s\n“fpath);
return ( stat(fpath&filestat) != -1);
}
// is the filepath a directory
int IsDIR(char* fpath)
{
struct stat filestat;
return ( stat(fpath&filestat) != -1 && S_ISDIR(filestat.st_mode));
}
const char* getextname(const char* filepath)
{
const char* p = NULL;
if(( p = strrchr(filepath‘.‘)) != NULL)
return p+1;
return NULL;
}
//write the packet header to the client
int writehead(FILE* cfp const char* extname)
{
char* content = “text/plain“;
if( strcmp(extname“html“) == 0 || strcmp(extname“htm“) == 0)
content = “text/html“;
else if ( strcmp(extname“css“) == 0 )
content = “text/css“;
else if ( strcmp(extname“gif“) == 0 )
content = “image/gif“;
else if ( strcmp(extname“jpeg“) == 0 || strcmp(extname“jpg“) == 0)
content = “image/jpeg“;
else if ( strcmp(extname“png“) == 0)
content = “image/png“;
//必须以\r\n结尾
fprintf(cfp“HTTP/1.1 200 OK \r\n“);
fprintf(cfp“Content-Type: %s \r\n“content);
//printf(“HTTP/1.1 200 OK \r\n“);
//printf(“Content-Type: %s \r\n“content);
return 0;
}
//send the data of the file which the client want
void sendobj(int connectfdconst char* serverfilepath)
{
FILE* sfp =NULL*cfp=NULL;
int c;
sfp = fopen(serverfilepath“r“);
if(sfp == NULL)
{
printf(“erro to openfile %s\n“serverfilepath);
return;
}
cfp = fdopen(connectfd“w“);
writehead(cfpgetextname(serverfilepath));
//发送完head开始发送body前必须先空一行
fprintf(cfp“\r\n“);
while( (c = getc(sfp)) != EOF)putc(ccfp);
fflush(cfp);
return ;
}
//send the 404 error message to the client
void msg404(int connectfd)
{
const char* msg;
msg = “HTTP/1.0 404 Not Found \r\n Content-Type: text/plain 404 not found by Manio\r\n“;
send(connectfdmsgstrlen(msg)0);
printf(“404\n“);
}
int do_requst(int connect_fd)
{
FILE *net_fd = 0;
char requestline[MAXDATASIZE]={0};
char cmd[128]={0};
char filepath[512]={0};
//当前目录作为根目录
snprintf(filepathsizeof(filepath)SRC_PATH);
//重新以只读方式打开
net_fd = fdopen(connect_fd“r“);
fgets(requestlineMAXDATASIZEnet_fd);
printf(“Recv:\n***************\n%s***************\n“requestline);
//strlen,不计算‘\0‘
sscanf(requestline“%s %s “cmdfilepath+strlen(SRC_PATH));
//p
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 640 2018-07-24 16:47 demo0\Makefile
文件 5701 2018-07-24 17:51 demo0\http.c
文件 137 2018-07-24 16:32 demo0\data\index.html
文件 57823 2018-07-20 16:46 demo0\data\p.png
....... 5780 2018-07-24 17:50 demo0\Release\http.o
文件 12874 2018-07-24 17:50 demo0\Release\http_server
文件 12874 2018-07-24 17:50 demo0\http_server
目录 0 2018-07-24 15:13 demo0\data
目录 0 2018-07-24 17:50 demo0\Release
目录 0 2018-07-24 17:53 demo0\prj
目录 0 2018-07-24 17:07 demo0
文件 368 2018-07-24 17:53 demo0\prj\http_server.IMD
文件 39 2018-07-24 17:53 demo0\prj\http_server.SearchResults
文件 4096 2018-07-24 17:53 demo0\prj\http_server.IAB
文件 1136 2018-07-24 17:50 demo0\prj\http_server.PR
文件 8 2018-07-24 17:50 demo0\prj\http_server.PFI
文件 4560 2018-07-24 17:50 demo0\prj\http_server.PRI
文件 6360 2018-07-24 17:53 demo0\prj\http_server.PS
文件 4096 2018-07-24 17:53 demo0\prj\http_server.IMB
文件 18191 2018-07-24 17:53 demo0\prj\http_server.WK3
文件 368 2018-07-24 17:53 demo0\prj\http_server.IAD
文件 776 2018-07-24 17:50 demo0\prj\http_server.PO
----------- --------- ---------- ----- ----
135827 22
- 上一篇:C语言图书管理系统源代码
- 下一篇:LSTM C++源代码
相关资源
- MFC的HttpClient的Get和Post方法
- 轻量级C++实现的httpserver和httpclient
- c++ HTTP协议库 httplib
- linux平台下C语言实现一个简单的http
- 用Socket 实现http协议
- HTTP上传和C++封装类支持GET、POST多种方
- C++实现http客户端连接服务端及客户端
- C++ httpclient类
- 纯C语言写的https模拟GET和POST
- c++ http
- c++ http并保存到本地
- C++ HTTP GET,POST的简单
- winhttp 异步c++库
- 飞秋基于c语言实现
- 编译原理firstselectfollow实验源代码
- C++实现HTTP处理类
- systemverilog验证 张春 源代码 http://ch
- C++ 实现的HTTP协议打包解析器
- C++实现HTTP(两种方式:WinInet和Socke
- 基于boost.asio库的C++http/https web server
- windows下C++实现的HTTP web 服务器
- C语言浏览器和http服务器实验报告含代
- 远程文件--select模式
- VC++ 实现将本地文件通过HTTP上传到网
- http 协议解析类 c++
- http协议实现c++
- 简单多线程socket聊天室程序(c语言)
- C语言实现高并发http文件上传服务器
- c语言socket实现的http服务器
- WIN32 select 模型之客户端
评论
共有 条评论