資源簡介
用純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
評論
共有 條評論