聊天系统客户端的设计与实现本科生设计.doc

上传人:豆**** 文档编号:17265245 上传时间:2022-05-23 格式:DOC 页数:57 大小:377.50KB
返回 下载 相关 举报
聊天系统客户端的设计与实现本科生设计.doc_第1页
第1页 / 共57页
聊天系统客户端的设计与实现本科生设计.doc_第2页
第2页 / 共57页
点击查看更多>>
资源描述

《聊天系统客户端的设计与实现本科生设计.doc》由会员分享,可在线阅读,更多相关《聊天系统客户端的设计与实现本科生设计.doc(57页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流聊天系统客户端的设计与实现本科生设计.精品文档.聊天系统客户端的设计与实现摘 要SOCKET是在Windows进行网络通信编程的API接口,也是Windows网络编程的事实标准。在网络编程中最常用的方案便是C/S模型。本程序是一个基于C/S模式的网络聊天程序,主要用于测试面向连接的socket编程技术。本程序使用Virtual C+6.0编写。为方便测试,本程序采用server(服务器端)和client(客户端)合一模式,使用简洁方便。需要注意的是本程序C/S端合一的模式和服务器地址、服务器端口号固定以及自动申请用户登陆ID的设计不只为了方便

2、测试,而且适宜商业化,但是在商业化阶段还是需要进行改进。本文主要是对本软件服务器端的设计作了比较详细的介绍,并对服务器端进行了初步的开发。而客户端的设计有很多都需要完善。客户端是给用户使用的,从方便和美观上,还都还有很多需要完善的地方。而且,由于时间关系,客户端还有些功能没有完全。如果要使本系统成为一个实际应用系统并在网络上实际应用,还要再下一番功夫进行设计。关键词: 套接字 客户机 服务器 网络聊天 ABSTRACTThe SOCKET connects in the API that the Windows carries on the network correspondence pla

3、it distance, is also the fact standard that the network of Windows weaves the distance. The most in common use project would be the customer/server model in network weave distance. This text puts forward to carry out the Internet with the WINSOCK under customer/server model in the project of the fam

4、iliar chat room software. This procedure is an according to customer/server mode of the network chat procedure, mainly used for the test to face to the copular socket plait distance. Use the Virtual C+6.0 plaits write. Test for the convenience, the procedure adoption server (the server carry) and cl

5、ient (the customer carry) s unite as one the mode, using the simple and direct convenience. What to need to be notice is this procedure the customer carry the server carry to unite as one of mode and obtain this machine IP address and au to be the customer debarkation ID the calculator automatically

6、 of design test for the convenience only, well proper and commercial, so need to carry on the improvement in the commercial stage. This article was mainly has made the quite detailed introduction to this software server end design, and has carried on the preliminary development to the server end. Bu

7、t the client side design has many needs to consummate. The client side is to the user the use, from convenient and on artistic, but also has the place which many needs to consummate. Moreover, as a result of the time relationship, the client side also has a function not completely. If must make this

8、 system to become a practical application system and in the network the practical application, but must the next time carry on the design again.Keyword: socket client server The network chats目 录第一章 概述11.1选题来源及意义11.1.1选题来源11.1.2选题意义11.2任务、要求及问题提出11.2.1任务、要求11.2.2问题提出21.3国内外发展概况21.3.1国内外发展概况21.3.2发展趋势

9、3第二章 设计原理和过程52.1用户需求分析52.2设计原理概述52.3系统模块设计62.4服务器数据库设计82.5客户/服务器程序设计92.6 TCP/IP协议11第三章 详细设计143.1类设计总体结构143.2服务器端底层通讯类设计153.3客户端底层通讯类设计163.4客户/服务器间通讯数据类设计173.5服务器应用程序类设计173.6客户端应用程序类设计18第四章 系统实现214.1系统环境214.1.1系统软硬环境214.1.2系统安装说明214.1.3系统运行说明224.1.4系统使用说明244.2具体实现244.2.1登录模块244.2.2查找用户模块244.2.3查看在线用户

10、模块264.2.4发群体消息模块264.2.5系统参数模块274.2.6个人设定模块284.2.7正常聊天模块284.3系统测试29结 论31谢 辞32参考文献33附 录34第一章 概述1.1选题来源及意义1.1.1选题来源在网络无所不在的今天,在Internet上,有icq,oicq,ticq等网络聊天软件,极大程度上方便了处于在世界各地的友人之间的相互联系,也使世界好象一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的朋友发信息,不管对方是否也同时在线,只要知道他有号码。本文讨论基于TCP/IP通信开发聊天程序的关键技术,重点讨论面向对象方法以及聊天程序的实现方法,并给出

11、了相应的VC+代码.网络聊天软件在国外的有icq等,在国内的主要有腾讯的Oicq,还有Ticq,OmO和一些在网页上的即时通讯工具,像Chinaren网站上的WebMaster等等,都做得即美观,且功能强大,Oicq现在拥有非常大的用户群。现在也有很多,在网络上不使用服务器的通讯软件,这种软件小巧且方便,也能解决一部分问题。但是有服务器的通讯软件,有着不可比拟的优势:可以发送离线消息,不管用户当时是否在线,下次上线时,就可以看到这条消息了。可以保存用户的个人信息或介绍,供人查看。而且,那种通讯软件,是以机器为通讯单元的,而这种聊天软件是以人为通讯单元。总之,这种软件在网络上,还是有很大的用途的

12、,为网络上通讯,带来极大的方便。虽然说,现在这个软件已经有公司把它开发出来了,我再做也不一定有新意,也未必可以做得更好,但作为毕业设计,也算是对我能力的一个考验和这四年来我学习知识的一个检查。如果这个软件做得比较成功的话,能为网络通讯带来一定的方便的话,我就很满足了。1.1.2选题意义以前聊天的方式早已离我们远去。自从我们顺应现代工业的潮流,从平房搬入楼房之后,在享受自动的水、电、煤气之时,我们也失去了旧日街坊邻里聚在一起群聚而谈的热闹和温情。甚至这种气氛也渗透到了家庭内部,我们与家人一起聊天的时间也越来越少。然而这并不是说人们不需要聊天提供的享受。在人情淡薄怀旧气氛浓重的九十年代末期,网络聊

13、天出现了。那些寂寞无助的“亚细亚的孤儿”们忽然发现了这一巨大的狂欢场所,更有甚于电子游戏带给他们的新奇和喜悦。“网聊”借助网络这种现代通讯手段在一定程度上恢复甚至拓展了传统聊天在人们生活中失去的地盘。这些因素都决定了网络聊天势必成为一种青年人的流行事物。1.2任务、要求及问题提出1.2.1任务、要求本设计基于TCP/IP通信开发聊天程序,综合利用VC+程序设计语言,以SQL Server2000数据库做后台开发出一高效实用的聊天系统客户端软件。该系统要求实现:1.实现各种信息的系统化、规范化和自动化;2.客户端应具有十分友好的主窗口界面,登陆界面和注册界面等;3.客户端可以使用户方便地进行登录

14、、下线、接收消息和发送消息等;4.客户端能够使用TCP连接实现与服务器端进行良好的协作与通信;5.客户端能够使用IP连接,与其他客户端进行信息的收发;6.客户端各个界面的设计合理、实用。1.2.2问题提出随着计算机应用技术的日益普及,网络也遍及到我们生活的每个角落,很好的利用这人资源,将为我们的工作和学习,带来极大的方便和提高工作效率,所以,开发一个网络里的C/S通讯软件,是十分必要。由于采用面向对象方法开发软件具有明显的优点,本系统将采用面向对象方法进行开发。由于采用面向对象的系统模型可以使整个软件系统的结构变得更加灵活,本系统的结构模型将采用面向对象的系统模型,采用VC+6.0这个可视化开

15、发工具进行编码。传统的软件工程方法有生命周期方法和快速原型法。面向对象方法学是一种全新的软件工程方法,其出发点和基本原则是尽可能模拟人类习惯的思维方式,把构成客观世界的实体抽象为对象。概括地说,面向对象方法学有四个要点:1.认为客观世界是由各种对象组成的,复杂的对象可以由比较简单的对象以某种方式组合而成;2.把所有对象都划分成各种对象类,每个对象类可以定义一组数据和方法;3.按照子类和父类的关系,把若干对象类组成一个层次结构的系统;4.对象彼此之间仅能通过传递消息互相联系。用面向对象方法学开发的软件有以下优点:1.与人类习惯的思维方法一致;2.稳定性好;3.可重用性好;4.可维护性好。1.3国

16、内外发展概况1.3.1国内外发展概况伴随着网络的发展,已经有大量的聊天类软件进入了实用阶段,例如现阶段大家经常使用的QQ,ICQ和MSN等,他们已经融入到大家的网络生活中,成为大家网络生活中必不可少的组成部分。而且其程序的功能也伴随着网络技术的发展而不断的完善和发展,从最初的只支持文本式聊天一直到现在的图文聊天、语音聊天、视频对话等,技术越来越成熟可靠。网络聊天软件在国外的有icq等,在国内的主要有腾讯的Oicq,还有Ticq,OmO和一些在网页上的即时通讯工具,像Chinaren网站上的WebMaster等等,都做得即美观,且功能强大,Oicq现在拥有非常大的用户群。现在也有很多,在网络上不

17、使用服务器的通讯软件,这种软件小巧且方便,也能解决一部分问题。但是有服务器的通讯软件,有着不可比拟的优势:可以发送离线消息,不管用户当时是否在线,下次上线时,就可以看到这条消息了。可以保存用户的个人信息或介绍,供人查看。而且,那种通讯软件,是以机器为通讯单元的,而这种聊天软件是以人为通讯单元。总之,这种软件在网络上,还是有很大的用途的,为网络上通讯,带来极大的方便。传统聊天是指在任何现代通讯技术出现之前人类最寻常的交流方式,即面对面地对话。它包括非正式的私人谈话,如家人团聚、邻居串门、朋友造访,也包括一些较为随意的多人集会如酒会、沙龙和座谈会。聊天的特点在于它的无目的性,天南地北,海阔天空,都

18、可以作为谈资助兴,所以正式的访谈和会议都不在聊天之列。传统聊天具有多重社会功能,比如交流情感、促进友谊、扩散信息等等,但最主要的还是消闲,一种有效的排解无聊的手段无聊这一词的字面意思就是指“不值一聊”。聊天作为一种消闲手段廉价而富有人情味,很适合人类这种拥有语言能力的高等群居动物。梁实秋的“雅舍小品”里有专文谈聊天的好处。即使在现代通讯方式已经非常普及的今天,传统聊天方式依然不可能被取代,然而它占有人们的时间已经大为缩小。虽然电话和网络提供了远程的即时交流手段,但是现代社会一方面加快了人们的生活和工作节奏,另一方面以商业化的手段向人们提供了更多消闲方式,其中电视就挤占了我们原先大量的聊天时间。

19、由于电视的诱惑,传统聊天被迫让出了它在人类生活中的地位。茶余饭后不再是门前一张板凳围在一起胡侃,而是每家每户坐在封闭的单元房内面对一台电子显像管。电视节目虽然表面上比聊天更为丰富多彩,但是看电视本身单向传递信息,没有反馈机制,观众只是被动地接受信息,只在极小的程度上参与节目。电视并不促进观众思考,也不会根据观众收看时的反应做出调整。更不要说电视的非人格化与聊天富有人情味的区别。电视虽然对人类消闲时间的争夺战中胜出,但它却不可能满足人类所有的需要,尤其是传统聊天能够满足的那些需要。这些需要也不是电子游戏、观看电影话剧表演甚至旅游所能替代的。这时,一种新的聊天形式借助网络生长出来,填补了人们的精神

20、空白。网络聊天同样具有传统聊天的基本功能,即消闲的作用,它也同样可以交流情感、促进友谊、传递信息,满足表达欲望。但它并非是传统聊天在网络上简单的呈现和复制,它具有并非本质但十分重要的特殊性质。1.3.2发展趋势最后试着讨论一下网络聊天的命运。网络聊天的现实存在不可能因为老师和家长的反对而消除,也不会因为某某法规的出台而被管制。淘汰它的只能是更发达的聊天技术,即语音聊天。语音聊天更为经济快捷,单位时间传递的信息量也更大。语音聊天的技术已经成熟,待它普及之后成熟之后,目前这种“打电话”的网络聊天方式将成为历史。等有一天,我们都可以像打免费电话那样语音聊天时,我们还会怀念当年那段“此时无声胜有声”的

21、网络聊天故事吗?第二章 设计原理和过程2.1用户需求分析提供基于TCP/IP网络的即时消息传送、大小图标方式、实时聊天、多人聊天等功能。具体列举如下:支持多账号。可以同时发送同一个消息给多人,通过输入这些人的号码列表或姓名列表。可以同时发送一个消息给所有好友。即使用户不在线,也能通过服务器发送离线消息。提供消息、聊天的历史记录,方便对信息的查看和管理。提供查看在线的人的功能。提供按ID或姓名查找用户的功能,添加用户方便。小窗口显示,不占用屏幕很大的空间。支持隐身登陆,可以看到在线的朋友,朋友却不知道你上线。可以实时显示用户的状态和随时改变自己的状态。提供了自动弹出消息。好友上线通知。好友下线更

22、新。查看好友信息。按姓名或号码查找某人。在好友列表中删除某人。更改个人信息。系统设置。主窗口总是浮在最上端。速度快,占用资源少。2.2设计原理概述采用客户端服务器模型,使用从MFC类中的CAsyncSocket类的派生类进行实现底层通讯,底层利用UDP数据报协议进行通讯,这样,便于客户端之间的直接通讯,也可以高效的传送消息。因为使用UDP协议进行通讯,所以要自己控制其可靠性。我每发送一个数据,接受方接受到数据后,会发回一个响应信息,发送方在一个超时时间内,收到响应信息,就表示发送数据成功,若没有收到,就表示发送失败,会按用户指定的次数N,重试N次,如果N次都失败,就返回发送数据失败。当然,发回

23、来的确认信息也可能丢失,但确认信息很短,相对来说,丢失的机率会小一些,是一个折中的办法。为了保存用户信息和好友信息及一些相关数据,服务器使用到数据库技术。服务器的数据库采用的是ODBC的SQL2000数据源,服务器访问数据库,用的是MFC中的CDatabase和CRecordset,因为,对数据库的操作简单,服务器端,我只要功能,不需做界面,所以使用Sql语句直接访问数据库,已经足够满足要求了。服务器运行的流程为:服务器运行后,开启服务,则服务器开始侦听用户请求,如有信息发送过来,首先,发送回确认信息,然后,建立一个线程,处理接受到的数据。在线程里,按照接受到数据的类别,进行相应的处理,如有需

24、要,会向用户发送处理的结果,或成功或失败的消息,处理结束后,线程就结束了。这样,可以实时接受每个用户的请求,不会因为处理一个用户的请求,而忽略了其它用户。服务器端主要是为用户存储必要的信息,协调用户之间的通讯,服务器端的设计,主要在功能上面。服务器端的设计和底层通讯的方法,将是我讲述的重点。客户端的运行流程为:若有本地用户信息,则取出本地用户信息,显示登陆窗口,若没有,则显示用户注册窗口(在登陆窗口里,也可以选择用户注册)。登陆时,可选择是否隐身,进入系统后,好友列表中,在线的人,将以高亮度显示,并处在列表的上头。不在线的人,将以灰色显示。登陆后,如果有的话,服务器会发来好友给你发送的离线消息

25、。如果有好友上线了,就会通知你,好友下线了,你也可以在好友列表中看到,你可能接受到别人给你发送的消息。根据用户的操作,可以向好友发送消息,查看好友信息,查看在线的人,查找用户等等功能。客户端主要是提供给用户一个友好的用户界面,方便用户操作,客户端主要负责从服务器上得到数据后,显示给用户。从服务器得到好友的IP和Port后,就可以直接与好友进行通讯,聊天等等。客户端主要是界面的设计(除了底层通讯的以外),根据不同的要求,向服务器发送各种类型的请求。然后等待服务器的响应。客户端的界面的设计很繁琐,没有详细介绍的必要,所以,我的重点将放在服务器的设计上。客户端只是简要的说明一下。2.3系统模块设计聊

26、天系统将分为六大模块,包括用查找户模块,查找在线用户模块,发群体消息模块,系统参数模块,个人设定模块,关于模块。各模块功能如下图2-1所示:图2-1 聊天系统模块在信息世界中,信息从客观事物出发流经数据库,通过决策机构最后又回到客观世界,信息的这一循环经历了三个领域:信息世界,数据世界,现实世界。现实世界的事物反映到人的头脑中,人的大脑对它有个认识过程,经过分析(选择、命名、分类等)进入信息世界。这些信息再进一步加工、编码,然后进入数据世界,而软件系统的开发工作需要考虑这两个方面的问题,也就是要考虑系统开发所需要的数据,以及如何对这些数据进行操作。这两个问题贯穿了整个软件系统的开发过程,这也就

27、是数据库的设计问题,也是软件设计的一个核心。在系统设计的开始,我首先考虑的是如何用数据模型来数据库的结构与语义,以对现实世界进行抽象。目前广泛使用的数据模型可分为两种类型,一种是独立于计算机系统的“概念数据模型”如“实体联系模型”,另一种是直接面向数据库逻辑结构的“结构数据模型”。在本系统中我采用“实体联系模型”(ER模型)来描述数据库的结构与语义,以对现实世界进行第一次抽象。ER模型直接从现实世界抽象出实体类型及实体间联系,然后用ER图来表示数据模型。它有两个明显的优点:接近于人的思维,容易理解;与计算机无关,用户容易接受。但ER模型只能说明实体间语义的联系,不能进一步说明详细的数据结构,它

28、只是数据库设计的第一步。ER图是直观表示概念模型的工具,它有四个基本成分:1.矩形框,表示实体类型(考虑问题的对象)。2.菱形框,表示联系类型(实体间的联系)。3.椭圆形框,表示实体类型和联系类型的属性。对于主键码的属性,如下表示:属性名(*)。4.直线,联系类型与其涉及的实体类型之间以直线连接。本系统为聊天系统客户端的实现,主要是聊天为主,考虑了多方面的因素以后,确定系统图如下:下面就是各实体及联系类型的属性图:(为了表达的方便,在这里我没有在一张图上表达出所有的关系,而是分别采用实体属性关系图(即E-R图)来表达数据库的结构。)本系统的实体图如下图所示:图2-2 用户信息图2-3 好友信息

29、图2-4 离线消息2.4服务器数据库设计服务器数据库设计的要求是要能够满足客户端的需求,保存用户信息和用户好友信息,提供离线消息的服务,和发广播消息的服务等。总共有三个表:用户信息表(Users)好友信息表(Friends)离线消息表(OffMsg)表2-1 用户信息表(Users)字段名称说明长度UserId(主键)自动编号4字节长整形Id用户帐号4字节长整形Photoid用户的图象编号4字节长整形password用户登陆的密码字符串name用户的姓名字符串sex用户的性别单字节整形 0男1女2未知age用户的年龄字符串 (为了适应不愿填写此项的人)canbeadd能否被人加为好友单字节整形

30、 (0,1,2 不能被加入,允许被任何人加入,需要身份验证)email电子信箱字符串homepage个人主页字符串address地址字符串phone电话字符串fax传真字符串department部门字符串description个人简介字符串表2-2 好友信息表(Friends)字段名称说明长度Num(主键)自动编号4字节长整形MyId自己帐号4字节长整形FriendId朋友帐号4字节长整形表2-3 离线消息表(OffMsg)字段名称说明长度MsgId(主键)自动编号4字节长整形RecvId接受者帐号4字节长整形SenderId发送者帐号4字节长整形RecvTime接受时间4字节长整形nInde

31、x发送消息类型4字节长整形Msg发送消息备注类型2.5客户/服务器程序设计C/S模型也是一种网络模型,但与前述的模型不同,它并不是定义了网络的层次结构,而是描述了一种网络程序运行的方式。C/S模型将网络应用程序分为客户和服务器两部分。客户方对服务器方发送信息请求,服务器方对其做出相应回答,提供服务。在TCP/IP网络应用中,多数网络应用程序是使用C/S模型设计的。服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户程序提出了请求信息。此时,服务程序被惊醒并且为客户提供服务,对客户的请求作出适当的反应。虽然基于连接的服务是设计C/S应用程序的标准,但

32、有些服务也是可以通过数据报Socket提供的。通常,网络应用程序包含两个独立的应用程序:客户程序和服务器程序。但是,也可以设计同时完成这两种功能的程序,例如,一些服务器程序如果不能完成一个服务请求时,它将转而充当客户程序,向其它服务器程序请求信息。这方面的一个典型例子就是提供Internet从域名到IP地址映射服务的DNS服务器。为了充分理解TCP/IP协议族,必须理解几个重要术语。这些术语指出了两个TCP/IP传输协议:用户数据包协议(UDP)和传榆控制协议(TCP)之间的区别。这些术语进一步描述了与网络连接、协议可靠性以及数据服务有关的协议特性。当建立服务器程序时,应该将服务器程序设计成等

33、候客户的请求。你知道,TCP传输层通过协议端口和应用程序(像服务器和客户)通信,也就是说,为了按收客户请求,服务器程序必须对传输层的一个特定协议端口进行侦听。当服务器配置socket接口时,它使用bind()函数让socket执行体登记一个协议端口。也就是说,程序告诉socket执行体使用哪个协议端口进行数据传送。Socket执行体接着告诉传输层某个特定协议端口已被使用,并将其收到的所有数据传送给Socket API。使用无连接协议的程序和使用面向连接协议的服务器程序之间的主要相似之处是它们都必须对一个协议端口进行侦听。例如,无连接和连接服务器程序必须在协议端口侦听客户请求。同样,由于无连接客

34、户程序没有和远地主机建立直接连接,所以它也必须对协议端口进行侦听,以便接收以对它服务请求产生的数据报应答。Socket API中的bind()函数让程序将一个本地地址(包括主机地址和协议端口)和一个Socket联系起来。下面程序行显示了一个典型的函数调用:resultbind ( socket_handle, local_structure, socket_address, address_ length)无连接客户程序也对一个协议端口进行侦听。使用无连接协议的程序不和远地主机建立直接连接。无连接客户程序使用数据报发送网络服务请求,它不建立点到点连接。因此无连接客户程序必须在一个协议端口,对应

35、答数据报进行侦听。与服务器程序一样,无连接客户程序也使用bind函数让Socket执行体登记协议端口。也就是说,类似服务器程序,无连接客户程序告诉Socket执行体使用哪个协议端口进行数据传输。Socket执行体处理传输层内UDP软件模块和客户程序之间的接口。图2-5 无连接协议的套接字调用时序图图2: 面向连接的套接字系统调用时序图图2-6 面向连接的套接字系统调用时序图2.6 TCP/IP协议TCP/IP是国际互联网所采用进行网际互连的通信协议。实际所称的TCP/IP协议包括了在国际互联网络应用的一组协议,互联网协议族是此协议族的另一个名字。这个协议族包括几种工作在不同层次上的网络协议,I

36、P互连协议(Internet Protocol),负责主机之间的传输数据。TCP传输控制协议(Transmission Control Protocol),负责在应用程序之间传递数据。UDP用户数据报协议(User Datagram Protocol),提供给用户进程的无连接协议,也负责在应用程序之间无连接传递数据,但不执行正确性检查。ICMP互连网控制报文协议(Internet Control Message Protocol),处理主机间的差错和传送控制。ARP地址解析协议(Address Resolution Protocol),负责将网络层地址转换成链路层地址。RARP反向地址解析协(

37、Reverse Address Resolution Protocol),负责将链路层地址转换成网络层地址。TCP/IP协议的核心是传输层协议(TCP、UDP)、网络层协议(IP)和物理接口层,这三层通常在操作系统的内核中实现。TCP/IP网络环境下的应用程序设计是通过网络系统编程界面Socket实现的,Socket提供应用程序与系统内核之间的网络编程接口。协议可以是可靠的可以是不可靠的。可靠的协议意味着当数据通过协议传递时,协议保证数据正确传输。可靠传输包括几个特征。首先,为了确保数据正确传送,协议在通信应用程序之间互相交换确认信息。也就是说,程序每次发送个报文时,都期望对方发送一个相当于说

38、:“我得到这个报文”的确认信息。如果发送程序没有收到这样一个确认信息,程序将自动重新发送此报文,直到得到应答信息为止。其次,为了确保传输的数据有效,可靠协议在每次传输时,都包含一个或更多的校验和(CRC)。接收计算机重新计算校验和,与收到的校验和进行比较。如果不匹配,就表明在传输过程中发生了错误。传输控制协议TCP是一个使用校验和确认信息以及其它可靠数据传输技术的可靠协议。相比之下,不可靠协议不能确保数据正确传输。协议试图传输数据,但不保证成功。而且,不可靠协议在传输失败后,并不通知发送方应用程序。可将不可靠数据传输比作没有返回地址的信件。如果发送地址是锗误的,由于邮递系统不能将信退回给你,所

39、以你就不知道信件有没有送到。即使发送地址是正确的,也不能保证邮递系统不丢失你的信件。TCPIP协议组中存在的两个基本数据服务是:字节流服务和数据报服务,使用字节流的协议将信息看作一串字节流进行传输。协议不管要求发送或接收数据的长度和传送数目,只是将数据看作一个简单的字节串流。使用数据报的协议将信息视作一个独立单元进行传输。协议单独发送每个数据报数据报之间不相互依赖。例如,假设你使用字节流协议发送5个数据段(每个有10字节)和一个包含50字节的数据段(总共100字节)。连接的接收方可以按每次20字节读数据(要读5次)。传输控制协议是字节流协议。字节流协议不关心每个数据段的长度。如果应用程序使用字

40、节流协议发送数据,则协议能够保证连接的另一端按照发送的顺序接收数据。相比之下,传输到同一目的地的多个数据报可能不会按发送顺序到达。如果接收方应用程序要求数据顺序一致,应用程序必须在数据到达后,校对这些数据。用户数据报协议和互连网协议使用数据报传输数据。数据报类似于信件。如果你在同一天给同一个人邮寄两封信,你无法知道那个人先收到那封信。同样,如果连续两天给两个人邮信,你也不能知道哪封信先收到。收到信的顺序和发送顺序可能相反。在TCP/IP术语中,端口类(Port)似于IP地址,IP地址与主机地址是相联系的,端口和协议相联系。IP数据报保存目的和源IP地址,同样传输协议也保存源和目的端口号。如果端

41、口这个概念对你来说很陌生,请考虑计算机上的硬件端口。你可能编写过往硬件端口送数据的程序。例如为了打印,如果没有其它程序的话,必须向串或并端口发送数据。PC机给它的端口命名和编号。例如,PC机的并行打印端口称为LPTl和LPT2,串行端口称为COM1和COM2。在Internet上,网络只是简单地对协议端口编号。在PC机,LPT1表示并行端口1。成千个PC机应用程序使用此方案。多年来,程序员编写PC程序时都假定LPT1表示并行打印端口1。同样,程序员将每个Internet协议端口与一个特定的应用程序和功能联系在一起。Internet包括像FTP、Telnet和Mail这样广泛使用的应用程序采用的

42、应用协议,在Internet上,这些应用程序使用一种叫做“通用口分配”的端口。通用口分配是特定应用程序广泛使用的一个协议端口。像PC程序员使用打印端口LPT1用于打印,Internet程序员也对具体应用程序使用许多协议端口。例如,平凡文件传输协议(FTP)的通用口分配是端口号21的。Telnet的通用口分配是端口号23。第三章 详细设计本章将论述软件系统的面向对象设计过程。用Visual C+语言在Windows环境下编程实现。3.1类设计总体结构服务器的类总体结构:1.主应用程序类CServerApp包含全局的数据结构2.传送信息类CData,CMsg1,CMsg2,CMsg3,CMsg4,

43、CMsgChangePI,CMsgModifyPwd, CMsgOnlineFriend,CMsgPerson,CshowOnlinePeople处理传输数据3.SOCKET通讯类CServerSocket, CSendSocket, CRecvSocket处理底层通讯的类,与外部的接口是CserverSocket类,提供了一个简单的接口4其它类CMainFrame,CServerDoc,CServerView,CSetupDlg,CAboutDlgUserInfo结构存储在线人的信息客户端的类总体结构:1.应用程序类CClientApp包含全局的数据结构2.传送信息类CData,CMsg1,

44、CMsg2,CMsg3,CMsg4,CMsgChangePI,CMsgModifyPwd, CMsgOnlineFriend,CMsgPerson,CshowOnlinePeople处理传输数据3.SOCKET通讯类CClientSocket处理底层通讯的类,提供了一个简单的接口4.用程序框架类CmainFrame处理用户界面和一些接受数据的响应,主要的处理过程都在这个类里实现。5.对话框类CfriendDetailDlg 显示用户详细信息的对话框类CloginDlg 显示登陆窗口的对话框类ClookDlg 显示查看消息的对话框类CregisterDlg 显示注册窗口的对话框类CsetupSe

45、rverDlg 修改服务器设置的对话框CtalkDlg 显示发送消息对话框的类CshowBroadcastDlg 显示广播消息的对话框CshowAddMsgDlg 显示被加为好友的信息的对话框CmultiSendDlg 通过姓名或ID列表的向多人发送信息的对话框CsendToAllDlg 向所有好友发送消息的对话框CModifyPIDlg 修改个人信息的对话框6.界面类CGfxGroupEdit,CGfxOutBarCtrl,CGfxPopupMenu实现像OutBar和oicq样式的那种滚动分栏的界面类,从Internet,上获得的源代码,通过修改一些接口,使之更适合我的应用。提供了一个漂亮

46、的界面。7.TrayIcon类处理在任务栏上添加.修改.删除图标的类。封闭了Window的API函数8.全局结构:UserInfo结构存储在线人的信息FriendState 在好友线信息结构SaveMsg 消息的存储结构Sparam 传给线程的参数结构3.2服务器端底层通讯类设计为了使能及时响应用户的请求,当用户很多时,仍然能够适应要求,我把侦听与发送数据的Socket分开,并分别都建立了多个实例,也就是说,支持多个端口的侦听,发送数据使用的是多个端口,我只对侦听端口感兴趣,对发送数据的端口不感兴趣,因为,发送端口是多少都无所谓。CRecvSocket和CsendSocket都是从CAsync

47、Socket类里继承而来,分别处理侦听请求各发送数据,在CServerSocket类里,定义了几个CRecvSocket和CSendSocket对象的实例,通过CServerSocket类对内部进行组织和管理,提供给上层的接口是CServerSocket,它隐藏了服务器底层通讯的细节及多线程发送数据的问题,提供给上一层一个统一的接口,CServerSocket类的使用,是先建立一个它的实例,再调用成员函数Create(),传入必要的参数,发送数据时,就调用其成员函数SendData,处理接受数据,在CRecvSocket类的OnReceive里处理,调用了一个名为ProcessRecvData的线程函数,用户在这个线程函数里写上具体的处理代码算法描述:发送一个数据,需要等待响应信息的回来,如果在规定时间内,还没有收到确认信息,则认为发送数据丢失,将重试FailReDoTime次,如

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com