- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Web服务器实现 高崇铭2012001010016
简单Web服务器详细设计说明书
英才实验1班 高崇铭 2012001010016
1、引言: 本程序为windous下用C++语言实现的简单的一个Web服务器,其功能很简单,开启时候能够监听到外部客户端发来的HTTP请求,解析请求文件,在本机进行搜索,最终以HTTP报文形式返回该文件。
由于这只是一个简单的服务器架构,并没有考虑很好的鲁棒性,即返回报文中只有200 OK的字段,并未考虑其他可能性。但在该程序的基础上,这些功能都很容易扩展。
整个程序的思路框架如下图:
2、组织结构:
3、程序:
3.1:主函数
(1)函数:
main(int argc, char **argv)
(2)函数功能:
包含socket(),bind(),listen(),accept(),recv(),closesocket()这一系列的套接字函数,负责建立套接字,绑定套接字与本机信息,分配端口号,监听并接收来自服务器的请求报文,将HTTP报文交给解析函数http_send_response(),最后关闭套接字。
(3)参数说明:
int argc: 参数个数
char **argv: 端口号
(4)返回值:
空
特殊说明:所用socket函数如下:
(1)函数:
socket( int af, int type, int protocol);
(2)函数功能:
创建一个套接字,出现在地址族中,但并未赋名。即只是创建了一个套接字的描述,此时没有IP和端口号与其关联。
(3)参数说明:
af:一个地址描述。目前仅支持AF_INET格式,也就是说ARPA Internet地址格式。
type:指定socket类型。其中所用SOCK_STREAM 提供有序的、可靠的、双向的和基于连接的字节流,使用带外数据传送机制,为Internet地址族使用TCP
protocol:指定协议,0为缺省。
(4)返回值:
若创建套接字失败,则返回INVALID_SOCKET。
(1)函数:
bind( SOCKET s, const struct sockaddr FAR* name,int namelen);
(2)函数功能:
将一本地地址与一套接口捆绑。本函数适用于未连接的数据报或流类套接口,在connect()或listen()调用前使用。当用socket()创建套接口后,它便存在于一个名字空间(地址族)中,但并未赋名。bind()函数通过给一个未命名套接口分配一个本地名字来为套接口建立本地捆绑(主机地址/端口号)。
(3)参数说明:
s:标识一未捆绑 HYPERLINK /view/567586.htm \t _blank 套接口的描述字。
name:赋予 HYPERLINK /view/567586.htm \t _blank 套接口的地址。
namelen:name名字的长度。
(4)返回值:
绑定成功返回0,失败返回-1或SOCKET_ERROR
(1)函数:
listen( SOCKET s, int backlog);
(2)函数功能:
Listen()将上一步bind()函数绑定过IP与端口号的套接字申请进入的连接建立一个后备日志,即为监听连接请求
(3)参数说明:
s:标识一未捆绑 HYPERLINK /view/567586.htm \t _blank 套接口的描述字。
name:赋予 HYPERLINK /view/567586.htm \t _blank 套接口的地址。
namelen:name名字的长度。
(4)返回值:
绑定成功返回0,失败返回-1或SOCKET_ERROR
(1)函数:
accept( SOCKET s, struct sockaddr * addr,int * addrlen);
(2)函数功能:
在到达listen()监听函数的请求连接队列中抽取第一个连接,创建一个相同SOCKET类型的套接字并返回句柄,即赋予新的端口号
(3)参数说明:
s:套接口描述字,该套接口在 HYPERLINK /view/569204.htm \t _blank listen()后监听连接。
addr:(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。addr参数的实际格式由套接口创建时所产生的地址族确定。
addrlen:(可选)指针,输入参数,配合addr一起使用,指向存有addr地址长度的整型数。
(4)返回值:
成功返回一个新的套接字描述符,失败返回-1或INVALID_SOCKET。
(1)函数:
recv(? HYPERLINK /view/13870.htm \t _blank
您可能关注的文档
- selenium入门资料.docx
- S版二年级上册语文优质课件28《做灯笼》.ppt
- s版二年级下册14《鲁班造伞课件》.ppt
- S版二年级下册21课《刘胡兰》课件.ppt
- sensor常见问题方向资料.pptx
- S版二年级语文下册《21、刘胡兰》.ppt
- SDA船体结构标准(全部)资料.doc
- S版二年级语文下册17古诗两首 小儿垂钓 课件.ppt
- s版六年级下《天上偷来的火种》课件.ppt
- S版六年级下册_作业_1 鲧禹治水.ppt
- 上海海洋大学《海洋环境分析技术》课件-21化学发光分析法.pdf
- 上海海洋大学《海洋环境分析技术》课件-20分子荧光分析法.pdf
- 上海海洋大学《海洋环境分析技术》课件-22色谱分离过程.pdf
- 上海海洋大学《海洋环境分析技术》课件-25气相色谱仪与固定液.pdf
- 上海海洋大学《海洋环境分析技术》课件-24色谱定性定量方法.pdf
- 上海海洋大学《海洋环境分析技术》课件-26气相色谱检测器.pdf
- 上海海洋大学《海洋环境分析技术》课件-29液相色谱固定相与流动相.pdf
- 上海海洋大学《海洋环境分析技术》课件-27气相色谱分离条件的选择.pdf
- 上海海洋大学《海洋环境分析技术》课件-28液相色谱仪器与类型.pdf
- 上海海洋大学《海洋环境分析技术》课件-3 原子光谱和分析光谱.pdf
文档评论(0)