资源简介
用纯C语言编写的简单WEB服务器,实现网页的访问,和简单CGI功能。

代码片段和文件信息
#include
#include
#include
//#define SERVPORT 5050
#pragma comment(lib“ws2_32.lib“)
#define SERVER_PORT 5050 //自定义的服务端口
#define HOSTLEN 256 //主机名长度
#define BACKLOG 10 //同时等待的连接个数
/**************************************
该方法包装了send()
通过该方法发送数据 能够全部发出
没有遗漏
**************************************/
int sendall(int s char *buf int *len)
{
int total; // 已经发送字节数
int bytesleft; //还剩余多少字节
int n;
total=0;
bytesleft=*len;
while(total < *len)
{
n = send(s buf+total bytesleft 0);
if (n == -1)
{
break;
}
total += n;
bytesleft -= n;
}
*len = total; // 返回实际发送出去的字节数
return n==-1?-1:0; // 成功发送返回0 失败-1
}
/**************************************
该方法处理错误请求
并向客户端发送错误信息
**************************************/
void wrong_req(int sock)
{
char* error_head = “HTTP/1.1 501 Not Implemented\r\n“; //输出501错误
char* error_type = “Content-type: text/plain\r\n“;
char* error_end = “\r\n“;
char* prompt_info = “The command is not yet completed\r\n“;
int len;
len = strlen(error_head);
if (sendall(sock error_head &len) == -1)
{ //向客户发送
printf(“Sending failed!“);
return;
}
len = strlen(error_type);
if (sendall(sock error_type &len) == -1)
{
printf(“Sending failed!“);
return;
}
len = strlen(error_end);
if (sendall(sock error_end &len) == -1)
{
printf(“Sending failed!“);
return;
}
len = strlen(prompt_info);
if (sendall(sock prompt_info &len) == -1)
{
printf(“Sending failed!“);
return;
}
}
/**********************************
该方法判断用户请求的文件是否存在
不存在返回0 存在返回文件的实际大小
***********************************/
int not_exit(char* arguments)
{
struct stat dir_info;
if(stat(arguments &dir_info) == -1)
return 0;
else
return dir_info.st_size;
}
/*************************************
所请求的文件不存在
*************************************/
void file_not_found(char* arguments int sock)
{
char* error_head = “HTTP/1.1 404 Not Found\r\n“; //构造404错误head
int len;
char* error_type = “Content-type: text/plain\r\n“;
char* error_length = “Content-Length: %d\n\n“;
char* error_end = “\r\n“;
char prompt_info[50] = “Not found: “;
len = strlen(error_head);
if (sendall(sock error_head &len) == -1)
{ //向客户端发送
printf(“Sending error!“);
return;
}
len = strlen(error_type);
if (sendall(sock error_type &len) == -1)
{
printf(“Sending error!“);
return;
}
//send the length
len = strlen(error_length);
if (sendall(sock error_length &len) == -1)
{
printf(“Sending error!“);
return;
}
len = strlen(error_end);
if (sendall(sock error_end &len) == -1)
{
printf(“Sending error!“);
return;
}
strcat(prompt_info arguments);
len = strlen(prompt_info);
if (sendall(sock prompt_info &len) == -1)
{ //输出未找到的文件
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 855 2010-07-27 10:27 server0727\aa.html
文件 83794 2008-04-14 20:00 server0727\aa.jpg
文件 1135 2006-05-10 00:50 server0727\cc.jpg
文件 2065408 2010-09-13 09:08 server0727\Debug\server.bsc
文件 213043 2010-09-13 09:08 server0727\Debug\server.exe
文件 255768 2010-09-13 09:08 server0727\Debug\server.ilk
文件 27123 2010-09-13 09:08 server0727\Debug\server.obj
文件 3907948 2010-09-13 09:08 server0727\Debug\server.pch
文件 607232 2010-09-13 09:08 server0727\Debug\server.pdb
文件 0 2010-09-13 09:08 server0727\Debug\server.sbr
文件 50176 2010-09-13 09:08 server0727\Debug\vc60.idb
文件 69632 2010-09-13 09:08 server0727\Debug\vc60.pdb
文件 1599 2010-06-24 10:17 server0727\download.html
文件 3672 2010-07-27 10:31 server0727\index1.html
文件 2355 2010-07-27 13:49 server0727\index2.html
文件 73 2010-09-13 09:17 server0727\readme.txt
文件 12844 2010-09-13 09:23 server0727\server.c
文件 3977 2010-07-27 09:55 server0727\server.dsp
文件 537 2010-07-19 14:26 server0727\server.dsw
文件 41984 2010-09-15 13:08 server0727\server.ncb
文件 48640 2010-09-15 13:08 server0727\server.opt
文件 1373 2010-09-13 09:08 server0727\server.plg
文件 8 2010-07-27 10:20 server0727\st
目录 0 2010-09-13 09:08 server0727\Debug
目录 0 2010-09-15 13:08 server0727
----------- --------- ---------- ----- ----
7399176 25
相关资源
- C++多线程网络编程Socket
- QtWebApp
- 简易web服务器的设计与实现
- C语言封装的HttpClient接口
- socket客户端.c
- socket服务端.c
- socket tcp应用
- C++ sql2008 WebServer通讯.docx
- socket通讯c++源码(客户端+服务端)
- MFC的异步网络通讯应用程序
- c++开发http服务端+客户端
- 一个简单而强大的基于MFC的web server源
- 各种关于CAsyncSocketCSocket内幕及其用法
- MFC多人聊天室
- 使用socket套接字发送udp数据包
- CAsyncSocket异步实现服务器与客户端
- 基于socket文件传输的实现源码[C++]
- C语言实现TCP/IP协议通信和UDP协议通信
- 百度地图二次开发汇总
-
minibl
ink c++ qt 浏览器 - DemoHttpMFC.zip
- c语言+UDP+DES加密+socket编程
- 功能全面的mfc Web浏览器
- 局域网下,手机可以和电脑通过sock
- 使用C#创建webservice服务,并使用服务
- 计算机网络课程设计之Ping程序含C++原
- 基于c++和winsocket的局域网聊天源代码
- 基于udp的socket编程
- C++_WebService_Demon
- VC++,CSocket实现网络聊天,可发文件,
评论
共有 条评论