软件开发设计文档模板.docx
《软件开发设计文档模板.docx》由会员分享,可在线阅读,更多相关《软件开发设计文档模板.docx(11页珍藏版)》请在冰豆网上搜索。
软件开发设计文档模板
软件开发设计文档
文档管理信息表
主题
web服务器
版本
1.0
内容
可响应客户端发送文件请求的web服务器
关键字
套接字,请求报文,响应报文,tcp编程
参考文档
无
创建时间
2016/4/2
创建人
吴鑫
最新发布日期
2016/4/2
文档变更纪录
更改人
日期
更改内容
何鑫
2016/4/4
创建文件
开发规划
开发人员
角色
主要职责
负责模块
人员
备注
何鑫
⏹负责编写窗口界面
⏹创建通信套接字建立连接
⏹获取http请求,解析请求报文
⏹封装文件到http响应报文中,并发送该响应报文
⏹软件的测试与优化
⏹xxx模块
xxx
⏹
⏹
⏹
⏹
⏹
⏹
⏹
开发环境和工具
开发工具
工具
作用
Microsoftvisualstudio2010
web服务器,窗口界面
总体设计
概念术语描述
术语1
静态文本框
术语2
请求报文
响应报文
基本设计描述
1.传入一个与某个浏览器通信的套接字
2.启动一个线程来监听浏览器接收到的数据recive
3.如果监听浏览器的请求报文了,要:
3.1要将请求报文显示在服务器软件的文本框中
3.2要分析浏览器发来的请求报文
3.3要根据请求报文处理浏览器的请求页面
4.生成响应报文,并输出到浏览器T
5.关闭当前连接
主要界面功能流程描述
功能1界面流程
1.使用vs2010创建一个基于c#的窗体程序
2.使用静态文本框,按钮等元素布置界面
3.添加显示文本框用来显示“ip”,“端口号”,和“日志”
3.给两个按钮的text重命名并在name里给其命名
4.最终窗体界面如图所示:
(注:
我们默认服务器的ip地址为127.0.0.1,端口号为5004)
功能2创建浏览器和服务器的通信流程
数据结构
数据库表列表
表名
作用
endpoint
网络节点对象,用来传入ip号和端口号
adress
用来获得IP这个文本框里面的内容,为将套接字绑定到端口号中做准备
threadwatch
创建负责调用套接字监听的线程
sokwatch
负责监听浏览器的套接字
sokconnection
接收浏览器请求并生成相应的通信套接字对象
isrunning
用来控制监听循环是否退出
模块列表
模块名称(英文)
功能
备注
模块1
sokwatch.Bind(endpoint)
将套接字绑定到指定的端口号上
模块2
sokwatch.Listen(10)
设置监听队列(监听套接字能够同时处理的浏览器连接请求最大个数)
模块3
voidwatchConnectt()
监听浏览器的连接请求
模块4
threadwatch=newThread(watchConnectt)
实例化线程
模块5
threadwatch.Start()
启动线程
模块6
voidshowmsg(stringmsg)
用来在txtmsglog文本框中显示相应的连接信息
功能3接收请求报文流程
模块列表
模块名称(英文)
功能
备注
模块1
publicdelegatevoidDGshowmsg(stringmsg)
用来在控件上显示消息的委托类型
新建类Dataconnection
模块2
publicdelegatevoidDGshowmsg(stringmsg)
用来在控件上显示消息的委托类型
新建类Gshowmsg,并用委托类型
模块3
publicDataconnection(Socketsokconnection,DGshowmsgdgshow)
在Dataconnection类里,通过在构造函数传入参数的方式来传入与某个浏览器通信的套接字和线程
模块4
this.threadconnection=newThread(recmsg);
直接在内部来创建通信线程对象
模块5
this.threadconnection.IsBackground=true;
this.threadconnection.Start();
启动该线程,并将其设置为后台线程arrmsg
模块6
length=sokconnection.Receive(arrmsg);
将浏览器发来的数据装入缓存区,并获得真实的数据长度
模块7
Try{}
Catch{}
调用委托对象来在文本框中打印异常消息
模块8
dgshow(recmsg);
在文本框中显示消息
数据结构
数据库表列表
表名
作用
conn
创建Dataconnection类对象,并传入当前套接字和线程
arrmsg
字节数组,当做缓存区
length
用来存放浏览器发来的数据的长度
recmsg
用来存储已转换成字符串类型的数据
功能4分析请求报文流程
模块列表
模块名称(英文)
功能
备注
模块1
publicHttpRequestmodel(stringrequeststr)
{}
生成请求报文实体对象,并分析请求报文字符串,将每个语义字符都次实体类的相应属性中
新建类HttpRequestmodel
模块2
string[]arrequest=requeststr.Replace("\r\n","籀").Split('籀');
这里表示的是将‘\r\n’转换成‘籀’,便于处理,并分割字符
新建类Gshowmsg,并用委托类型
模块3
string[]firstrow=arrequest[0].Split('');
按照控件将已经分割好的字符再分割
模块4
给路径赋值
数据结构
数据库表列表
表名
作用
path
定义页面路径字符串
功能5读取文件流程
模块列表
模块名称(英文)
功能
备注
模块1
dataDir=System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
获得浏览器请求文件的物理路径
默认该请求文件在工程目录下
模块2
Switch()
{
Case:
Case:
}
根据请求文件的后缀名不同来做出不同的判断
模块3
voidProcessstaticPage(stringpath)
该方法用来专门处理静态文件
模块4
using(FileStreamfs=newFileStream(path,FileMode.Open)){}
使用文件流的方式来读取文件
前提是要为FileStream导入命名空间
数据结构
数据库表列表
表名
作用
requestModel
在dataconnecton类里创建请求报文实体对象
dataDir
用来存放当前执行程序的物理路径
fileDir
存储请求文件的物理路径
extentionName
存储请求文件的后缀名
功能6生成响应报文流程
模块列表
模块名称(英文)
功能
备注
模块1
publicbyte[]GetHttpResponseHeader(){}
返回响应报文头字符串
默认该请求文件在工程目录下
模块2
returnSystem.Text.Encoding.UTF8.GetBytes(sbResponse.ToString());
返回请求文件的字节数组
模块3
sokconnection.Send(model.GetHttpResponseHeader());
利用套接字来将响应报文头发送回去
模块4
使用文件流的方式来读取文件
前提是要为FileStream导入命名空间
数据结构
数据库表列表
表名
作用
arrfile
以二进制形式存储的文件数据
contentType
默认的响应内容的类型
sbResponse
用来显示响应报文头
model
生成响应报文头对象
附录
第三方组件
使用的命名空间:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Net.Sockets;
usingSystem.Net;
usingSystem.Threading;
参考资料
自己动手写web服务器(视频版)