资源简介
用纯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语言实现ftp文件传输
- 多人聊天室 C++
- 简单易懂C++ WebServer接口开发源代码
- 使用TCP简单文件传输控制台程序VC++
- C++编写的Socket通信程序源代码
- 利用MFC的Csocket类实现网络通信
- Socket文件传输
- C++ Socket网络聊天
- VC6.0 winsock编程.pdf
- MFC中利用CSocket实现UDP通信
- 基于MFC的CSocket类实现点对点通信
- csEXWB|C#浏览器|强大的控件
- 基于MFC的聊天室网络socket
- qt c++ webQQ 源码
- 基于MFC基本对话框的CSocket局域网通信
- traceroute在windows下的c++实现源代码
- MFC socket 服务器端编程
- 利用Socket实现双机通信C++
- C++ CAsyncSocket类聊天室程序
- VC6.0--计算器
- MFC websocket server | MFC websocket服务器
- QtWebService开发
- Linux大作业 web服务器
- C语言socket实现文件
- winsocket编程实现简单 server端和client端
- 基于C_S结构的Socket程序设计(含源码
- MFC使用WebBrowser控件调用百度地图API案
- duilib中WebBrowser C++与js相互调用
- linux微型web服务器
- MySock 应用Socket编程实现一个简单的网
评论
共有 条评论