• 大小: 1.85MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-21
  • 语言: C/C++
  • 标签: WEB  socket  HTTP  

资源简介

用纯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\style.ccs

     目录          0  2010-09-13 09:08  server0727\Debug

     目录          0  2010-09-15 13:08  server0727

----------- ---------  ---------- -----  ----

              7399176                    25


评论

共有 条评论