软件开发设计文档
目 录
1 开发规划.......................................................................................................................................................... 1
1.1 开发人员................................................................................................................................................. 1
1.2 开发计划................................................................................................................................................. 2
1.3 开发环境和工具................................................................................................................................... 3
1.4 开发规范................................................................................................................................................. 3
2 总体设计.......................................................................................................................................................... 4
2.1 概念术语描述........................................................................................................................................ 4
2.1.1 术语1............................................................................................................................................. 4
2.1.2 术语2............................................................................................................................................. 4
2.3 主要界面流程描述............................................................................................................................... 7
2.3.1 功能1界面流程.......................................................................................................................... 7
2.3.2 功能2界面流程.......................................................................................................................... 7
2.4 模块列表................................................................................................................................................. 8
3 数据结构.......................................................................................................................................................... 9
4 接口规范....................................................................................................................................................... 10
4.1 <模块1 API>....................................................................................................................................... 10
4.1.1 Interface1.................................................................................................................................... 10
4.1.2 Interface2.................................................................................................................................... 10
4.2 <模块2 API>....................................................................................................................................... 11
4.3 <模块3 API>....................................................................................................................................... 11
4.4 <数据库API>...................................................................................................................................... 11
5 模块设计....................................................................................................................................................... 12
5.1 Module1设计.................................................................................................................................... 12
5.1.1 模块设计描述............................................................................................................................ 12
5.1.2 模块界面描述............................................................................................................................ 12
5.2 Module2设计.................................................................................................................................... 13
6 附录................................................................................................................................................................ 14
6.1 第三方组件.......................................................................................................................................... 14
6.2 参考资料.............................................................................................................................................. 15
6.3 附加文档.............................................................................................................................................. 15
开发规划
开发人员
陈兆庭、黄志鹏、吴雪晴:负责数据库部分编码,服务器部分编码,服务器与安卓端通信部分编码
胡宇晨、康鑫、林静雯、涂涵越:负责用户界面部分编码,及数据处理逻辑的编码
开发环境和工具
工具 作用
------------------------------------------------------------------------------------------------------------
Android Studio 安卓开发IDE
Ubuntu 服务器端系统
服务器端环境 提供web服务器功能
总体设计
概念术语描述
日记
较为完整
术语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 void watchConnectt()
|
监听浏览器的连接请求 |
|
模块4 threadwatch = new Thread(watchConnectt)
|
实例化线程 |
|
模块5 threadwatch.Start()
|
启动线程 |
|
模块6 void showmsg(string msg) |
用来在txtmsglog文本框中显示相应的连接信息 |
|
功能3接收请求报文流程
模块列表
模块名称(英文) |
功能 |
备注 |
模块1 public delegate void DGshowmsg(string msg)
|
用来在控件上显示消息的委托类型
|
新建类Dataconnection |
模块2 public delegate void DGshowmsg(string msg) |
用来在控件上显示消息的委托类型 |
新建类Gshowmsg,并用委托类型 |
模块3 public Dataconnection(Socket sokconnection,DGshowmsg dgshow) |
在Dataconnection类里,通过在构造函数传入参数的方式来传入与某个浏览器通信的套接字和线程 |
|
模块4 this.threadconnection = new Thread(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
public HttpRequestmodel(string requeststr) {} |
生成请求报文实体对象,并分析请求报文字符串,将每个语义字符都次实体类的相应属性中
|
新建类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 void ProcessstaticPage(string path)
|
该方法用来专门处理静态文件 |
|
模块4 using(FileStream fs=new FileStream(path,FileMode.Open)){} |
使用文件流的方式来读取文件 |
前提是要为FileStream导入命名空间 |
|
数据结构
数据库表列表
表名 |
作用 |
requestModel
|
在dataconnecton类里创建请求报文实体对象 |
dataDir |
用来存放当前执行程序的物理路径 |
fileDir |
存储请求文件的物理路径 |
extentionName |
存储请求文件的后缀名 |
功能6生成响应报文流程
模块列表
模块名称(英文) |
功能 |
备注 |
模块1
public byte[] GetHttpResponseHeader(){}
|
返回响应报文头字符串 |
默认该请求文件在工程目录下 |
模块2 return System.Text.Encoding.UTF8.GetBytes(sbResponse .ToString ());
|
返回请求文件的字节数组 |
|
模块3 sokconnection.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服务器(视频版)