1、(word完整版)软件开发设计文档实用模板软件开发设计文档文档管理信息表主题web服务器版本1.0内容可响应客户端发送文件请求的web服务器关键字套接字,请求报文,响应报文,tcp编程参考文档无创建时间2016/4/2创建人吴鑫最新发布日期2016/4/2文档变更纪录更改人日期更改内容何鑫2016/4/4创建文件目 录1开发规划11.1开发人员11.2开发计划21.3开发环境和工具31.4开发规范32总体设计42.1概念术语描述42.1.1术语142。1。2术语24 2.3主要界面流程描述72。3.1功能1界面流程72.3。2功能2界面流程72.4模块列表83数据结构94接口规范104。1模块
2、1 API104。1.1Interface1104。1.2Interface2104。2模块2 API114。3模块3 API114。4数据库API115模块设计125.1Module1设计125.1。1模块设计描述125。1。2模块界面描述125.2Module2设计136附录146.1第三方组件146.2参考资料156.3附加文档15精彩文档开发规划开发人员角 色主要职责负责模块人员备注何鑫n 负责编写窗口界面n 创建通信套接字建立连接n 获取http请求,解析请求报文n 封装文件到http响应报文中,并发送该响应报文n 软件的测试与优化n xxx模块xxxnnnnnnn开发环境和工具开发
3、工具工具作用Microsoft visual studio 2010web服务器,窗口界面总体设计概念术语描述术语1静态文本框术语2请求报文响应报文基本设计描述 1。传入一个与某个浏览器通信的套接字 2.启动一个线程来监听浏览器接收到的数据recive 3。如果监听浏览器的请求报文了,要: 3.1要将请求报文显示在服务器软件的文本框中 3.2要分析浏览器发来的请求报文 3.3要根据请求报文处理浏览器的请求页面 4.生成响应报文,并输出到浏览器T 5。关闭当前连接主要界面功能流程描述功能1界面流程1. 使用vs2010创建一个基于c#的窗体程序2. 使用静态文本框,按钮等元素布置界面3。添加显示
4、文本框用来显示“ip”,“端口号,和“日志”3. 给两个按钮的text重命名并在name里给其命名4. 最终窗体界面如图所示:(注:我们默认服务器的ip地址为127。0.0。1,端口号为5004)功能2创建浏览器和服务器的通信流程数据结构数据库表列表表名作用endpoint网络节点对象,用来传入ip号和端口号adress用来获得IP这个文本框里面的内容,为将套接字绑定到端口号中做准备threadwatch创建负责调用套接字监听的线程sokwatch负责监听浏览器的套接字sokconnection接收浏览器请求并生成相应的通信套接字对象isrunning用来控制监听循环是否退出模块列表模块名称(
5、英文)功能备注模块1sokwatch。Bind(endpoint)将套接字绑定到指定的端口号上模块2sokwatch.Listen(10)设置监听队列(监听套接字能够同时处理的浏览器连接请求最大个数)模块3 void watchConnectt()监听浏览器的连接请求模块4threadwatch = new Thread(watchConnectt)实例化线程模块5threadwatch.Start()启动线程模块6void showmsg(string msg)用来在txtmsglog文本框中显示相应的连接信息功能3接收请求报文流程模块列表模块名称(英文)功能备注模块1 public del
6、egate void DGshowmsg(string msg)用来在控件上显示消息的委托类型新建类Dataconnection模块2public delegate void DGshowmsg(string msg)用来在控件上显示消息的委托类型新建类Gshowmsg,并用委托类型模块3public Dataconnection(Socket sokconnection,DGshowmsg dgshow)在Dataconnection类里,通过在构造函数传入参数的方式来传入与某个浏览器通信的套接字和线程模块4this.threadconnection = new Thread(recmsg)
7、;直接在内部来创建通信线程对象模块5this。threadconnection。IsBackground = true; this.threadconnection。Start();启动该线程,并将其设置为后台线程arrmsg模块6length = sokconnection。Receive(arrmsg);将浏览器发来的数据装入缓存区,并获得真实的数据长度模块7TryCatch调用委托对象来在文本框中打印异常消息模块8dgshow(recmsg);在文本框中显示消息数据结构数据库表列表表名作用conn创建Dataconnection类对象,并传入当前套接字和线程arrmsg字节数组,当做缓存
8、区length用来存放浏览器发来的数据的长度 recmsg用来存储已转换成字符串类型的数据功能4分析请求报文流程模块列表模块名称(英文)功能备注模块1 public HttpRequestmodel(string requeststr)生成请求报文实体对象,并分析请求报文字符串,将每个语义字符都次实体类的相应属性中新建类HttpRequestmodel模块2string arrequest=requeststr.Replace(”rn”,籀”)。Split(籀);这里表示的是将rn转换成籀,便于处理,并分割字符新建类Gshowmsg,并用委托类型模块3string firstrow = arr
9、equest0。Split( );按照控件将已经分割好的字符再分割模块4给路径赋值数据结构数据库表列表表名作用path定义页面路径字符串功能5读取文件流程模块列表模块名称(英文)功能备注模块1 dataDir = System.IO.Directory。GetParent(dataDir).Parent。Parent.FullName;获得浏览器请求文件的物理路径默认该请求文件在工程目录下模块2Switch()Case:Case:根据请求文件的后缀名不同来做出不同的判断模块3 void ProcessstaticPage(string path)该方法用来专门处理静态文件模块4using(Fi
10、leStream fs=new FileStream(path,FileMode.Open))使用文件流的方式来读取文件前提是要为FileStream导入命名空间数据结构数据库表列表表名作用requestModel在dataconnecton类里创建请求报文实体对象dataDir用来存放当前执行程序的物理路径fileDir存储请求文件的物理路径extentionName存储请求文件的后缀名功能6生成响应报文流程模块列表模块名称(英文)功能备注模块1 public byte GetHttpResponseHeader()返回响应报文头字符串默认该请求文件在工程目录下模块2 return Syst
11、em。Text。Encoding.UTF8.GetBytes(sbResponse .ToString ());返回请求文件的字节数组模块3sokconnection。Send(model.GetHttpResponseHeader();利用套接字来将响应报文头发送回去模块4使用文件流的方式来读取文件前提是要为FileStream导入命名空间数据结构数据库表列表表名作用arrfile以二进制形式存储的文件数据contentType默认的响应内容的类型sbResponse用来显示响应报文头model生成响应报文头对象附录第三方组件使用的命名空间:using System;using System.Collections。Generic;using System。ComponentModel;using System.Data;using System。Drawing;using System。Linq;using System。Text;using System.Windows。Forms;using System.Net。Sockets;using System.Net;using System.Threading;参考资料自己动手写web服务器(视频版)精彩文档