C写的http服务器
来源:互联网 发布:配乐诗朗诵软件 编辑:程序博客网 时间:2024/05/22 08:12
/**
@file sample_httpd.c
@author Kevin Lynx
@brief sample httpd, just for testing purpose.
*/
#include <winsock2.h>
#include <stdio.h>
void http_response( SOCKET con, const char *request )
{
/* get the method */
char *token = strtok( request, " " );
char *uri = strtok( 0, " " );
//char *uri1 = strtok( 0, " " );
char file[64];
sprintf( file, ".%s", uri );
{
/* load the file content */
FILE *fp = fopen( file, "rb" );
if( fp == 0 )
{
/* response 404 status code */
char response[] = "HTTP/1.1 404 NOT FOUND\r\n\r\n";
send( con, response, strlen( response ), 0 );
}
else
{
/* response the resource */
/* first, load the file */
int file_size ;
char *content;
char response[1024];
fseek( fp, 0, SEEK_END );
file_size = ftell( fp );
fseek( fp, 0, SEEK_SET );
content = (char*)malloc( file_size + 1 );
fread( content, file_size, 1, fp );
content[file_size] = 0;
sprintf( response, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: %d\r\n\r\n%s", file_size, content );
send( con, response, strlen( response ), 0 );
free( content );
}
}
}
int main()
{
WSADATA wd;
int ret;
SOCKET s;
ret = WSAStartup( MAKEWORD( 2, 0 ), &wd );
if( ret < 0 )
{
fprintf( stderr, "winsock startup failed\n" );
exit( -1 );
}
s = socket( AF_INET, SOCK_STREAM, 0 );
{
/* bind and listen */
struct sockaddr_in addr;
memset( &addr, 0, sizeof( addr ) );
addr.sin_family = AF_INET;
addr.sin_port = htons( 8080 );
addr.sin_addr.s_addr = inet_addr( "0.0.0.0" );
ret = bind( s, (struct sockaddr*)&addr, sizeof( addr ) );
if( ret < 0 )
{
fprintf( stderr, "bind failed\n" );
closesocket( s );
exit( -1 );
}
ret = listen( s, 1024 );
if( ret < 0 )
{
fprintf( stderr, "listen failed\n" );
closesocket( s );
exit( -1 );
}
}
{
SOCKET con = accept( s, 0, 0 );
/* recv request */
char request[1024] = { 0 };
ret = recv( con, request, sizeof( request ), 0 );
printf( request );
http_response( con, request );
closesocket( con );
}
closesocket( s );
WSACleanup();
return 0;
}
@file sample_httpd.c
@author Kevin Lynx
@brief sample httpd, just for testing purpose.
*/
#include <winsock2.h>
#include <stdio.h>
void http_response( SOCKET con, const char *request )
{
/* get the method */
char *token = strtok( request, " " );
char *uri = strtok( 0, " " );
//char *uri1 = strtok( 0, " " );
char file[64];
sprintf( file, ".%s", uri );
{
/* load the file content */
FILE *fp = fopen( file, "rb" );
if( fp == 0 )
{
/* response 404 status code */
char response[] = "HTTP/1.1 404 NOT FOUND\r\n\r\n";
send( con, response, strlen( response ), 0 );
}
else
{
/* response the resource */
/* first, load the file */
int file_size ;
char *content;
char response[1024];
fseek( fp, 0, SEEK_END );
file_size = ftell( fp );
fseek( fp, 0, SEEK_SET );
content = (char*)malloc( file_size + 1 );
fread( content, file_size, 1, fp );
content[file_size] = 0;
sprintf( response, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: %d\r\n\r\n%s", file_size, content );
send( con, response, strlen( response ), 0 );
free( content );
}
}
}
int main()
{
WSADATA wd;
int ret;
SOCKET s;
ret = WSAStartup( MAKEWORD( 2, 0 ), &wd );
if( ret < 0 )
{
fprintf( stderr, "winsock startup failed\n" );
exit( -1 );
}
s = socket( AF_INET, SOCK_STREAM, 0 );
{
/* bind and listen */
struct sockaddr_in addr;
memset( &addr, 0, sizeof( addr ) );
addr.sin_family = AF_INET;
addr.sin_port = htons( 8080 );
addr.sin_addr.s_addr = inet_addr( "0.0.0.0" );
ret = bind( s, (struct sockaddr*)&addr, sizeof( addr ) );
if( ret < 0 )
{
fprintf( stderr, "bind failed\n" );
closesocket( s );
exit( -1 );
}
ret = listen( s, 1024 );
if( ret < 0 )
{
fprintf( stderr, "listen failed\n" );
closesocket( s );
exit( -1 );
}
}
{
SOCKET con = accept( s, 0, 0 );
/* recv request */
char request[1024] = { 0 };
ret = recv( con, request, sizeof( request ), 0 );
printf( request );
http_response( con, request );
closesocket( con );
}
closesocket( s );
WSACleanup();
return 0;
}
- C写的http服务器
- C++写HTTP服务器
- C语言实现的微型 http 服务器
- 写个Http服务器吧!
- Java写简单HTTP服务器
- 网友写的JAVA版HTTP服务器程序
- J2ME写的简单Http服务器,同时是简…
- 一个用nodejs写的简单http服务器
- 通过nginx反向代理go语言写的http服务器
- 写一个python脚本,实现简单的http服务器功能:
- java造轮子之自己写简单的HTTP服务器
- 【c】C语言编程写的一个http下载程序
- C语言版本的http server,关注libuv写的
- 从零开始学写HTTP服务器(二)socket编程实现简单的http server
- C语言编程写的一个http下载程序
- 用C编写一个简单的、基本的http服务器
- 用c写的一个简单web服务器实现
- 自己动手写http服务器---java版
- acm每日一练之分数加减法
- 不能安装一些软件openssh-server需要更新源
- 简单 sql 分页学习
- 用ffmpeg将aac转成mp3 的.bat文件
- JAVA虚拟机内存设置
- C写的http服务器
- history
- Linux grep 命令用法
- 宇龙酷派笔试题 2014 武汉
- HTTP协议的C语言编程实现实例
- As3.0中的位图(Bitmap/BitmapData)编程
- ORA-17629:rman创建 standby数据库时报错
- 循环队列(C语言版)
- MySql升级数据库没有升级遇到Your privilege table structure seems to be older than this MySQL version