免费预览已结束,剩余41页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华南农业大学理学院课程论文(设计)2010-2011学年第2学期课程名称:计算机网络课程设计课程性质:实践课专业班级:08信息与计算科学3班考核方式:考查学生人数:4学 分:2学 时:1周教师姓名:蔡贤资计 算 机 网 络课 程 设 计 报 告课程名称: 计算机网络 实验学期:2010年至2011年 第2学期所在学院:理学院2008年级 信息与计算科学3班学生姓名 赖呈坚 学号 200830760310 自评成绩 98 教师评成绩学生姓名 李 杰 学号 200830760311 自评成绩 98 教师评成绩学生姓名 罗思捷 学号 200830760314 自评成绩 98 教师评成绩学生姓名 曾静芸 学号 200830760323 自评成绩 98 教师评成绩指导教师: 蔡贤资 计算机网络 课程设计报告设计题目基于socket的实时数据通信软件设计时间20011年5月10日设计性质应用性设计性综合性设计成绩教师评阅: 设计目的明确;操作步骤正确;设计文稿(表格、程序、数据库、网页)符合要求; 设计结果正确;设计分析总结全面;设计报告规范;课程设计答辩情况记录: 思路清晰;语言表达准确,概念清楚。 准备工作充分, 具备必要的报告资料;报告在规定的时间内完成。 回答问题有理论依据,基本概念清楚。主要问题回答简明准确; 对前人工作有改进或突破,或有独特见解。评阅教师签名: 时间 一、课程设计目的本课程设计将通过实际的操作和设计,加深学生对数据库原理与方法的理解,巩固课堂教学内容,初步掌握数据库的主要技术和操作方法,并在此基础上强化学生的实践意识、提高实际动手能力和创新能力。目 录1.概述12.系统分析12.1 需求分析12.2 可行性分析23. 总体分析23.1 系统功能描述23.2 系统模块架构图34. 系统设计34.1 设计目标34.2 开发及运行环境44.3 概念结构设计44.4 逻辑结构设计55. 技术准备75.1 命名规则75.2 组件准备86. 主要功能模块设计96.1 系统架构设计概述96.2 软件界面设计106.3 模块详细设计127. 调试与错误处理327.1 注册时两次密码不匹配327.2 注册时用户名已存在327.3 登录用户不存在337.4 登录用户重复337.5 发送文件时没有选择用户338. 运行349. 总结409.1 分工情况409.1 感想40421. 概述随着网络的技术的迅猛发展,以及网络在我们生活的快速普及,网络成为我们之间交流信息的一个重要手段,它的快速即时,大大拉进了我们之间的距离,使远在他乡的学子可以随时与家人通话,可以使相隔大洋两岸的亲人护送祝福这一切都归功与网络的发展给我们的生活带来的方便。而在网络的若干应用中,聊天工具是最不可缺少的应用程序,使我们互相聊天,信息交流的重要工具,我们的聊天工具就是基于该目的而写的。作为了一个聊天工具,在实现的时候必须分为两部分,分别是:服务器和客户端,该组成成分应该使应用程序实现以下若干基本功能:(1)能进行用户管理,所有用户必须登录到服务器,由服务器维护在线信息;(2)用户登录后能进行实时多方点到点短信息通信;(3)能选择要求服务器进行转发服务;(4)能保存通信记录到数据库;(5)能进行双方文件传输,能显示进度; 通过以上的基本功能,可以基本实现两个或多个客户端的信息交流。2. 系统分析2.1 需求分析随着网络的技术的迅猛发展,以及网络在我们生活的快速普及,网络成为我们之间交流信息的一个重要手段。该聊天应用程序就是利用网络实现远距离信息交流。本应用程序参考了我们常用的聊天工具QQ,该应用程序使用了C/S模式分为两部分:(1)服务器,(2)客户端。服务器提供的服务:l 新账户注册须将数据上传至服务器待管理员审核;l 账户登录输入账户名与密码,上传至服务器的数据库,审核无误则登录用户;l 两客户端通信时则,客户端将请求发到服务器,与服务器建立连接,服务器再转发消息实现两个或两个以上客户端的通信;l 文件传输则服务器向客户端返回另一客户端的IP地址,两客户端建立连接,直接实现文件传输;l 当另一方客户端未登录服务器,则服务器先将消息或者文件存入数据库,直到另一客户端上线再将数据转发给客户端,从而实现离线转发功能;客户端提供的功能:l 用户界面友好;l 应用程序设置人性化,无需专业人员指导即可使用该程序;l 有在线用户列表,可以实时地了解在线用户;2.2 可行性分析2.2.1技术可行性分析现在网络上聊天工具的应用程序十分丰富,而我们的程序基本上融合了大部分聊天工具的功能。在该次程序的设计中,我们选择了C#作为我们的开发语言,利用了Win Socket API函数实现利服务器监听,解决了应用程序的单方点对点的通信,以及群聊等一系列功能。2.2.2经济可行性分析本次程序设计需要的开销:l 电脑四台:一台作为服务器,三台作为客户端,可进行单方通信,也可以进行多方群聊通信,文件传输等功能的测试;l 实现书籍若干;l 路由器一台。3. 总体分析3.1 系统功能描述即时数据通信软件是提供给在局域网中学校、企业等人员进行即时通信的网络平台,它的基本功能是进行点对点或者多人聊天,点对点收发文件,消息记录、查询等功能。即时数据通信平台的结构图是:即时数据通信平台服务器客户端图1 即时数据通信平台结构图服务器的主要功能是:n 为客户端提供连接服务;n 进行消息/文件的转发;n 更新在线/离线用户列表;n 保存聊天记录; 客户端的主要功能是:n 用户的注册和登录;n 私聊和群聊;n 文件传输/接收;n 聊天记录查询;3.2 系统模块架构图即时数据通信软件服务端模块客户端模块为客户端提供连接消息文件转发更新用户列表为客户端提供连接用户注册登录私聊和群聊文件传输和接收聊天记录查询根据上面分析,经过整理,可以得到得面的关于即时数据通信软件的功能架构图:图2 报名管理系统功能架构图4. 系统设计4.1 设计目标本软件属于小型网络交流工具,为了对局域网内的人员之间进行聊天,文件收发等。本软件可以达到以下目标:客户端:n 软件采用人机对话方式,软件界面美观友好,使用大家熟悉的QQ聊天界面,方便,快捷,清晰;n 实现在相同局域网内进行多方或点对点的聊天、文件收发;n 用户均有自己的注册账号、密码,通过账号和密码登录服务器;n 所有的用户都可以查看已注册用户的在线状况;n 个人用户查看自己参与的所有聊天记录内容;n 个人用户可以对自行选择群聊或私聊;服务器:n 提供多客户端进行接入;n 提供客户端接入端口;n 查看用户的在线状况;n 群聊、私聊内容的转发;n 提供文件的转发功能;n 为离线用户提供离线信息转发;n 将用户的聊天记录记录在数据库中;n 保存用户注册信息,并写入数据库中;4.2 开发及运行环境系统开发平台:visual studio2010数据库管理系统软件:Microsoft Office Access运行平台:windows XP / 7用户运行环境:.NET framework 2.04.3 概念结构设计本软件采用人机交互,所有操作都是由人提供、计算机执行。同时每个功能都有相应的业务流向,下面是该系统各业务的流程图:由于这个软件是为用户提供即时通讯服务,所以客户端和服务端均有一定的流程,下面是设计客户端和服务端的流程:客户信息接收客户命令客户消息转发服务管理员开始监听等待客户接入用户图3 客户端系统流程图用户开启服务器,等待客户端的接入,当有客户端接入时,便可对接入用户的基本信息进行记录,然后让每个在线用户都可看到其在线状况。对于每一个已经接入的用户进行监听,当接收到来自客户端的命令时,判断客户端发过来的信息,对消息进行记录,并进行对用户进行转发,最后重新对客户的接入进行监听。用户注册登录注册信息聊天记录用户消息/文件接收图4 客户端流程图 客户端首先进行注册信息,并对已注册的用户提供服务器登录功能。文件和消息的接收是客户端的主要功能,用户进行发送的消息竟会进行记录,当用户有血药对聊天记录进行查询时,可以返回给用户查看。4.4 逻辑结构设计4.4.1 设计数据集和数据项1)用户信息,数据项为:用户名、密码、离开时间;2)聊天记录,数据项为:发送者、接收者、时间、文本4.4.2 数据结构设计我们把以上的数据项使用E-R图的方式描述出来。其中各个实体的E-R图如下:用户信息用户名密码离开时间图5用户信息ER图聊天记录发送者接收者时间文本图6聊天记录ER图同时,实体与实体之间也存在关系,他们之间的关系就是本系统的内在结构关系。实体与实体之间的关系用E-R图表示为:用户信息聊天记录发送/接收图7 总E-R图把实体转化为关系表,再参照实体之间的联系定义表格相应的主键,最后得到此数据库各个表格的设计结果。4.4.3 数据信息表1)用来保存用户信息基本信息。表user的结构如下表1 user字段名数据类型数据长度可否为空中文描述usernameChar10NOT NULL个人账号(主键)passwordChar10NOT NULL个人用户密码leavetimeDateNOT NULL用户离开时间2)聊天记录数据表chatrecord是为了记录用户之间的聊天记录,方便用户,管理员进行记录查询,表chatrecord的结构如下:表2 chatrecord字段名数据类型数据长度可否为空中文描述sendChar10NOT NULL发送者(主键)receiveChar10NOT NULL接收者(主键)timeDateNOT NULL记录时间(主键)textVARChar50NOT NULL记录信息文本5. 技术准备5.1 命名规则本软件所有文件都按照一定的规则命名,这是为了避免文件在浏览时因文件名出现差错。n 数据库数据库以相应的英文单词或拼接命名,如表9所示:表3 数据库命名规则数据库名称描述Chat及时通信软件数据库n 数据表数据库表名也是以英文单词或拼接命名,如表10所示。表4 数据表命名规则数据表名称描述user个人注册信息表chatrecord通信记录表n 字段字段采用以相应的英文单词或拼音缩写命名:表5 字段名名规则字段名描述username个人账号名(主键)password个人账户密码leavetime最后一次离开时间send发送者receive接收者time消息时间text消息内容5.2 组件准备在开发报名管理系统时,需要使用Access 2003、Visual Studio 2010。同时使用的时候是需要进行配置的。下面是关于这些软件的配置和介绍。n Access 2003首先要安装Microsoft office 2003的所有组件,安装完成后即包含Access 2003,然后就可以用C# 语言嵌入SQL语言对数据库进行操作。n Visual Studio 2010这是用于C#应用软件编写的集成开发平台,其强大的.NET平台能够为软件的开发提供很大的方便。首先安装Visual Studio 2010的所有组件,然后要对Visual Studio 2010进行一定的配置,首先运行软件,在文件菜单的新建项目中如下图所示设置:图8 Visual Studio 2010配置图选择C#作为编程语言,选中Windows 窗体应用程序,考虑到并非所有电脑都支持.NET Framework 3.5或4.0,所以我们选择较为普遍的.NET Framework 2.0,提高软件的兼容性,完成后即可对软件进行编写。6. 主要功能模块设计6.1 系统架构设计概述根据上面的设计,各客户端连接中心服务器,向服务器发送功能请求,服务器做出相应应答和数据库操作,本软件的架构图如下:数据库服务器客户端1客户端1客户端1图9 软件总架构图用户通过客户端界面的各种按钮、文本框等对客户端进行操作,实现不同的功能,客户端的功能如下图所示:客户端注册登录接发消息文件传输消息记录单人群离线消息聊天记录图10 客户端功能架构图客户端并不具有以上功能的处理能力,而是通过服务器接收客户端发来的命令,完成相应的功能,并将信息反馈到相应的客户端或进行相应的数据库操作。服务器的功能如下图所示:服务器建立连接数据库操作监听信息反馈和转发插入新用户验证用户插入新消息查询消息记录更新用户信息图11服务器功能架构图客户端通过服务器的IP地址和端口号建立与服务器的连接,双方通过命令进行通信并实现以上功能。以下是客户端和服务器的联系图:客户端服务器消息反馈转发其他客户端图12 客户端和服务器联系6.2 软件界面设计软件的界面设计是软件的基础,软件界面是程序和用户沟通的桥梁,通过用户界面可以具体形象地将程序所能实现的功能展示给用户,用户也能很方便地通过用户界面实现软件的功能,可以说没有了用户界面,软件的可使用性和交互性将大幅度降低。本软件分为服务器和客户端,所以相应地拥有服务器界面和客户端界面,其中服务器的界面以简洁和信息显示为主,如下图所示:图13 服务器界面 服务器端口:用于设置服务器的端口。 开启服务器:用于开启服务器监听。 停止服务器:用于关闭服务器监听。 在线用户列表:显示当前所有在线的用户。 聊天内容:显示服务器开启后所处理的消息和信息。 在线用户人数:显示当前在线用户人数。客户端界面着重于美观和合理的分布,如下图所示:图14 客户端界面服务器IP和端口:用于设置连接服务器的IP和端口号。用户列表:显示当前在线或离线的用户,点击用户可与其通信。群聊按钮:用于切换到群聊模式。文件传输:用于与特定用户进行文件传输和接收文件。聊天内容:用于显示聊天的内容、离线消息和相关信息。发送信息:用于输入要发送的信息并通过发送按钮将信息发送出去。聊天记录:用于显示聊天记录。6.3 模块详细设计6.3.1 连接模块连接模块是该程序的核心,用于客户端和服务器的通信,是所有功能实现的前提。服务器开启后启动监听,用于监听用户的连接请求,用户通过服务器IP和端口号向服务器请求连接,并启动监听获取服务器的反馈信息,连接成功后服务器启动新的线程用于处理用户相应的请求,其中相关代码如下:服务器: /开启服务器 private void btStartServer_Click(object sender, EventArgs e) int iPort = this.returnValidPort(tbServerPort.Text.Trim(); if (iPort = MAXUSER) MessageBox.Show(连接数已经超过允许连接的最大数 + MAXUSER.ToString() + ,拒绝新的连接!, 错误提示); this.rbChatContent.AppendText(连接数已经超过允许连接的最大数 + MAXUSER.ToString() + ,拒绝新的连接!); newSocket.Close(); else /启动一个新的线程,处理用户相应的请求 ChatClient newClient = new ChatClient(this, newSocket); Thread ClientThread = new Thread(newClient.ClientService); ClientThread.Start(); Thread.Sleep(200); catch (Exception ex) this.UpdateMsg(ex.Message); 6.3.2 通信模块用户端和服务器的通信通过Socket实现,将消息转成字节流,再转由网络流发送,相关代码如下:服务器:/回发消息给客户端private void SendToClient(ChatClient client, string msg)Byte message = System.Text.Encoding.Default.GetBytes(msg.ToCharArray(); client.CurrentSocket.Send(message, message.Length, 0);客户端:/发送消息到服务器private void SendToServer(string msg) Byte bytes = System.Text.Encoding.Default.GetBytes(msg.ToCharArray(); nsStream.Write(bytes, 0, bytes.Length);6.3.3 注册模块用户需要使用该软件进行通信,必须先向注册一个账户,客户端向服务器发送新用户的信息,包括用户名和密码,服务器将新用户信息写入数据库,并反馈注册成功的信息和告知所有在线用户有新用户注册,相关的程序代码如下:服务器:else if (acceptStr0.ToUpper() = REGISTER)/注册 string username; string password; string msgreg; string time = System.DateTime.Now.ToString(); / 更新数据库 OleDbConnection cnn = new OleDbConnection(frmServerMnstr); cnn.Open(); username = acceptStr1; password = acceptStr2; string adduser = insert into user values( + username + , + password + , + time+ ); OleDbCommand cmd = new OleDbCommand(adduser, cnn); try cmd.ExecuteNonQuery(); msgreg = REGOK|; SendToClient(this, msgreg); IEnumerator myIEnumerator = frmServerMain.clients.Values.GetEnumerator(); while (myIEnumerator.MoveNext() ChatClient cClient = (ChatClient)myIEnumerator.Current; SendToClient(cClient, JOIN| + username + |); Thread.Sleep(100); catch(Exception ex) msgreg = REGERROR|+ex.Message+|; SendToClient(this, msgreg);cnn.Close();客户端:private void register() tcpClient = new TcpClient(); tcpClient.Connect(IPAddress.Parse(textBox1.Text.Trim(), Int32.Parse(textBox2.Text.Trim(); nsStream = tcpClient.GetStream(); newthread = new Thread(new ThreadStart(this.ServerResponse); newthread.Start(); string cmm = REGISTER| + Session.username + | + Session.password + |; endToServer(cmm);6.3.4 登录模块客户端连接服务器后,通过向服务器发送登录用户名和密码,服务器连接数据库验证该用户的登录信息是否正确,如果登录成功,服务器将反馈登录成功的信息给客户端,并告知所有在线用户有新用户登录,相关程序代码如下:服务器:if (acceptStr0.ToUpper() = CONNECT) /如果为CONECT,则它的命令格式为“CONNECT|发送者的用户名:附件信息” /则acceptStr1保存的就是用户名 string password=acceptStr2; = acceptStr1; if (frmServerMain.clients.Contains() SendToClient(this, LOGINERROR|User + + 已经登录!); else OleDbConnection cnn = new OleDbConnection(frmServerMnstr); string loginsql = select * from user where username= + + and password= + password + ; OleDbCommand cmd = new OleDbCommand(loginsql, cnn); cnn.Open(); OleDbDataReader dr = cmd.ExecuteReader(); if (dr.HasRows = false) SendToClient(this, LOGINERROR|该用户不存在!请注册!); else Hashtable synClients = Hashtable.Synchronized(frmServerMain.clients); synClients.Add(, this); /更新界面 server.AddUser(); /对每一个在线用户发送JOIN和LIST消息命令更新用户列表 IEnumerator myIEnumerator = frmServerMain.clients.Values.GetEnumerator(); while (myIEnumerator.MoveNext() ChatClient cClient = (ChatClient)myIEnumerator.Current; SendToClient(cClient, JOIN| + + |); Thread.Sleep(100); /更新连接状态 connState = connected; SendToClient(this, OK|); cnn.Close(); 客户端:private void connect() tcpClient = new TcpClient(); tcpClient.Connect(IPAddress.Parse(textBox1.Text.Trim(), Int32.Parse(textBox2.Text.Trim(); nsStream = tcpClient.GetStream(); newthread = new Thread(new ThreadStart(this.ServerResponse); newthread.Start(); string cmm = CONNECT| + Session.username + | + Session.password + |; SendToServer(cmm);/if (acceptFromServer0.ToUpper() = OK) buttonlogin.Visible = false; buttonreg.Visible = false; labelname.Text += Session.username; SendToServer(LISTALL); /MessageBox.Show(登录成功!); 6.3.5 用户列表更新模块当新用户成功登录后,客户端向服务器发送获取用户列表请求,服务器接到请求后连接数据库获取所有注册用户列表和在线用户列表,发送到客户端,客户端对用户列表进行更新,相关程序代码如下:服务器:/ 获取用户列表 public string GetUserList()string userList=;for(int i=0;ilbOnlineUser.Items.Count;i+) userList = userList + lbOnlineUser.Itemsi.ToString() + |; return userList;/接到客户端发来的用户列表请求else if (acceptStr0.ToUpper() = LIST) /MessageBox.Show(接到请求); /connState = connected; if (connState = connected) /向客户端发送LIST命令,以此更新客户端的当前在线用户列表 string msgUsers = LIST| + server.GetUserList(); SendToClient(this, msgUsers); /MessageBox.Show(发送列表); else SendToClient(this, ERROR|服务器未连接,请重新登录); else if (acceptStr0.ToUpper() = LISTALL) if (connState = connected) string alluser=; OleDbConnection cnn = new OleDbConnection(frmServerMain.c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 参加公务员考试变参公试题及答案
- 城市道路提升改造工程建设工程方案
- 十五五规划纲要:应急管理体系现代化的顶层设计与能力提升
- 十五五规划纲要:饲料产业配方优化政策
- 乡镇生活污水处理建设项目申请报告
- 2026年蔬菜种植公司税务登记与纳税申报管理制度
- 2026年蔬菜种植公司绿禾应付账款核算与支付管理制度
- 2026年能源加工公司资金集中管理调度管理制度
- 2026年能源加工公司环保目标责任考核管理制度
- 游戏行业的崛起及市场发展机遇解读
- 药敏试验结果解读及临床应用
- 35千伏集电线路工程专业监理实施细则
- GB/T 20428-2006岩石平板
- for循环的应用 课件 高中信息技术
- 中石油英语900句
- 脑性瘫痪儿童的康复 脑性瘫痪的物理治疗
- 2022年广西第十四五年规划和2035年远景目标纲要公需科目考试答案(140题)
- 产科急症抢救规程图(所有流程图)
- 河北省承德市各县区乡镇行政村村庄村名居民村民委员会明细
- 光化学反应精品课件
- 新苏教版二年级上册数学全册单元测试卷
评论
0/150
提交评论