-
大小: 5.15M文件類型: .rar金幣: 1下載: 0 次發(fā)布日期: 2024-04-22
- 語言: C/C++
- 標簽: Linux實訓??web服務(wù)器??c??
資源簡介
運用網(wǎng)絡(luò)編程和并發(fā)編程的知識,設(shè)計一個簡單的web服務(wù)器,在實現(xiàn)的過程中學習網(wǎng)絡(luò)套接字編程、HTTP 協(xié)議、Web 服務(wù)器、cgi'等知識;提供靜態(tài)網(wǎng)頁瀏覽服務(wù)功能、動態(tài)網(wǎng)頁服務(wù)功能,以及可以顯示圖片。
代碼片段和文件信息
/*?$begin?tinymain?*/
/*
?*?tiny.c?-?A?simple?iterative?HTTP/1.0?Web?server?that?uses?the?
?*?????GET?method?to?serve?static?and?dynamic?content.
?*/
#include?“csapp.h“
void?doit(int?fd);
void?read_requesthdrs(rio_t?*rp);
int?parse_uri(char?*uri?char?*filename?char?*cgiargs);
void?serve_static(int?fd?char?*filename?int?filesize);
void?get_filetype(char?*filename?char?*filetype);
void?serve_dynamic(int?fd?char?*filename?char?*cgiargs);
void?clienterror(int?fd?char?*cause?char?*errnum?
?char?*shortmsg?char?*longmsg);
int?main(int?argc?char?**argv)?
{
????int?listenfd?connfd?port?clientlen;
????struct?sockaddr_in?clientaddr;
????/*?檢查命令行參數(shù)?*/
????if?(argc?!=?2)?{
????????/*fprintf函數(shù)
原型:int?fprintf?(?FILE?*?stream?const?char?*?format?...?);
描述:將格式指向的C字符串寫入流中
參數(shù):stream:指向標識輸出流的FILE對象的指針。
??????format:包含要寫入流的文本的C字符串。
返回值:成功:返回寫入的字符總數(shù)。
發(fā)生寫入錯誤:設(shè)置錯誤指示符(ferror)并返回負數(shù)。
編寫寬字符時發(fā)生多字節(jié)字符編碼錯誤:將errno置為EILSEQ,返回負數(shù)
????????*/
fprintf(stderr?“usage:?%s?\n“?argv[0]);
exit(1);
????}
????//atoi方法將字符串變成整型
????port?=?atoi(argv[1]);
????//調(diào)用csapp頭文件中的Open_listenfd方法
????listenfd?=?Open_listenfd(port);
????while?(1)?{
clientlen?=?sizeof(clientaddr);
connfd?=?Accept(listenfd?(SA?*)&clientaddr?&clientlen);?
doit(connfd);?????????????????????????????????????????????
Close(connfd);????????????????????????????????????????????
????}
}
/*?doit?-?處理一個HTTP請求/響應事務(wù)*/
void?doit(int?fd)?
{
????int?is_static;
????/*struct?stat:描述一個linux系統(tǒng)文件系統(tǒng)中的文件屬性的結(jié)構(gòu)。
??????struct?stat?{
????????mode_t?????st_mode;???????//文件對應的模式,文件,目錄等
????????ino_t??????st_ino;???????//inode節(jié)點號
????????dev_t??????st_dev;????????//設(shè)備號碼
????????dev_t??????st_rdev;???????//特殊設(shè)備號碼
????????nlink_t????st_nlink;??????//文件的連接數(shù)
????????uid_t??????st_uid;????????//文件所有者
????????gid_t??????st_gid;????????//文件所有者對應的組
????????off_t??????st_size;???????//普通文件,對應的文件字節(jié)數(shù)
????????time_t?????st_atime;??????//文件最后被訪問的時
????????time_t?????st_mtime;??????//文件內(nèi)容最后被修改的時間
????????time_t?????st_ctime;??????//文件狀態(tài)改變時間
????????blksize_t?st_blksize;????//文件內(nèi)容對應的塊大小
????????blkcnt_t???st_blocks;?????//偉建內(nèi)容對應的塊數(shù)量?};
????*/
????struct?stat?sbuf;
????char?buf[MAXLINE]?method[MAXLINE]?uri[MAXLINE]?version[MAXLINE];
????char?filename[MAXLINE]?cgiargs[MAXLINE];
????rio_t?rio;
??
????/*?Read?request?line?and?headers?*/
????/*void?rio_readinitb(rio_t?*rp?int?fd)
描述:rio_t?結(jié)構(gòu)體初始化并綁定文件描述符與緩沖區(qū)
參數(shù):rio_t結(jié)構(gòu)體
? ??????fd?文件描述符
????*/
????Rio_readinitb(&rio?fd);//將rio初始化
????/*ssize_t?rio_readlineb(rio_t?*rp?void?*usrbuf?size_t?maxlen)
???????描述:讀取一行的數(shù)據(jù),遇到‘\n‘結(jié)尾代表一行
???????參數(shù):rp:rio_t包
?????????????usrbuf:用戶地址,即目的地址
?????size_t?一行最大的長度。若一行數(shù)據(jù)超過最大長度,則以‘\0‘截斷
???????返回值:真正讀取到的字符數(shù)量
????*/
????Rio_readlineb(&rio?buf?MAXLINE);?//讀取rio的一行到buf中
????/*sscanf函數(shù)
??????原型??int?sscanf?(const?char?*strconst?char?*?format........);???????
??????函數(shù)說明??將參數(shù)str的字符串根據(jù)參數(shù)format字符串來轉(zhuǎn)換并格式化數(shù)據(jù)
??????返回值?成功返回參數(shù)數(shù)目,失敗返回-1,錯誤原因存于errno?返回0表示失敗?*/??????????????????
????sscanf(buf?“%s?%s?%s“?method?uri?version);//將buf中的值以空格為分界
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1701??2020-07-30?23:47??實習代碼\cgi-bin\adder.c
?????文件??????31762??2020-07-31?08:12??實習代碼\cgi-bin\adder.cgi
?????文件????????963??2020-07-30?23:05??實習代碼\cgi-bin\adder.c~
?????文件????????393??2020-07-31?08:51??實習代碼\cgi-bin\first.c
?????文件???????8647??2020-07-31?08:51??實習代碼\cgi-bin\first.cgi
?????文件????????397??2020-07-31?08:47??實習代碼\cgi-bin\first.c~
?????文件????????179??2020-07-29?15:35??實習代碼\csapp\cpstdin.c
?????文件??????17773??2020-07-29?15:36??實習代碼\csapp\csapp.c
?????文件??????23041??2020-07-29?15:56??實習代碼\csapp\csapp.h
?????文件????????303??2020-03-12?11:46??實習代碼\example1_travel\example1_travel.iml
?????文件??????11206??2020-03-12?15:42??實習代碼\example1_travel\h1_first_page.html
?????文件?????472751??2018-01-26?14:10??實習代碼\example1_travel\image\banner_1.jpg
?????文件?????483792??2018-01-26?15:34??實習代碼\example1_travel\image\banner_2.jpg
?????文件?????417348??2018-01-26?15:35??實習代碼\example1_travel\image\banner_3.jpg
?????文件??????33932??2018-01-30?13:31??實習代碼\example1_travel\image\footer_service.png
?????文件?????169953??2018-01-26?14:10??實習代碼\example1_travel\image\guonei_1.jpg
?????文件???????9831??2018-01-30?13:44??實習代碼\example1_travel\image\hotel_tel.png
?????文件???????3024??2018-01-26?14:10??實習代碼\example1_travel\image\hot_tel.jpg
?????文件???????5113??2018-01-26?14:10??實習代碼\example1_travel\image\icon_1.jpg
?????文件???????4791??2018-01-26?14:10??實習代碼\example1_travel\image\icon_2.jpg
?????文件???????4986??2018-01-26?14:10??實習代碼\example1_travel\image\icon_3.jpg
?????文件???????4624??2018-01-26?14:10??實習代碼\example1_travel\image\icon_4.jpg
?????文件???????2471??2018-01-26?14:16??實習代碼\example1_travel\image\icon_5.jpg
?????文件???????2986??2018-01-26?14:16??實習代碼\example1_travel\image\icon_6.jpg
?????文件???????2668??2018-01-26?14:10??實習代碼\example1_travel\image\icon_7.jpg
?????文件?????143051??2018-01-26?14:10??實習代碼\example1_travel\image\jiangwai_1.jpg
?????文件??????44779??2018-01-26?14:10??實習代碼\example1_travel\image\jiangxuan_1.jpg
?????文件??????41113??2018-01-26?14:10??實習代碼\example1_travel\image\jiangxuan_2.jpg
?????文件??????38788??2018-01-26?14:10??實習代碼\example1_travel\image\jiangxuan_3.jpg
?????文件??????32906??2018-01-26?14:10??實習代碼\example1_travel\image\jiangxuan_4.jpg
............此處省略37個文件信息
- 上一篇:基于單片機的交通燈設(shè)計.doc
- 下一篇:共享內(nèi)存 讀寫
評論
共有 條評論