信息处理课程设计实践报告聊天软件设计.doc
《信息处理课程设计实践报告聊天软件设计.doc》由会员分享,可在线阅读,更多相关《信息处理课程设计实践报告聊天软件设计.doc(20页珍藏版)》请在三一办公上搜索。
1、信息处理课程设计实践报告题 目: 聊 天 软 件 班 级: 信科04-4班 学 号: 姓 名: 指导教师: 中国矿业大学计算机学院2007-1-11摘 要本文介绍了一个基于Client/Server模式的聊天软件的设计与实现。运用Visual C+ 6.0开发,利用MFC对话框开发软件界面。 本软件分两个模块:服务器端和客户端。采用WinSock编程技术,实现了点对点的通信。服务器和客户端工程在网络方面都单独设计了Socket相关类继承与Windows CSocket类,封装性好。很好的体现了面向对象的设计思想和开发方法。软件实现上采用了多线程技术。不但实现了普通聊天软件的网络聊天功能,还增加
2、了网络文件传输和抓取对方屏幕截图的功能。关键词 QQ聊天 聊天软件 Csocket 网络编程 课程设计目 录第1章 课题概述11.1 课题目的与意义11.2 课程设计及报告的说明2第2章 网络编程相关的理论与技术32.1 计算机网络模型32.1.1 OSI的7层模型32.1.2 TCP/IP模型52.2 网络应用程序62.3WinSock 编程82.4多线程12第3章 聊天软件的设计与实现183.1 服务器端实现183.1.1 服务器端资源准备183.1.2 服务器端程序实现193.2 客户端实现223.2.1 客户端资源准备223.2.2 客户端程序实现273.3聊天软件的其他技术29结 束
3、 语30参考文献32第1章 课题概述1.1 课题目的与意义本课程设计是网络通信课程设计,课题可以有1、设计组织局域网2、网络通信程序设计(基于各类网络协议,例如tcp、udp等等)。我们选择实现一个网络通信软件。利用网络协议和Windows编程技术做一个简易QQ。 通过本课程设计的实现,我们能进一步掌握常用的网络协议及其在程序中的运用。同时,也更进一步学习和熟练windows编程技术,加强自己的动手能力。并且一个这样的聊天软件在设计上是可以在教育网用户给同学们之间免上公网聊天的,而且还可以快速传输一些文件,对于距离比较远的两个人是相当实用的,另外,增加的抓取对方屏幕截图功能可以在远程帮助对方解
4、决一些难以用语言描述的问题,对于电脑新用户远程请教或求助极其方便。当然,要使其更实用还有待进一步完善,不过我们的这个课题在设计上是具备以上意义的。 1.2 课程设计及报告的说明本次课程设计由我和曾亮组成一个小组共同完成。本次课程设计设计报告组织结构为:1、课题概述;2、网络编程相关的理论与技术;3、软件的设计与实现;4、结束语; 5、参考文献;第2章 网络编程相关的理论与技术2.1 计算机网络模型网络有多种多样的分层模型,这里介绍OSI的7层模型和TCP/IP模型。2.1.1 OSI的7层模型OSI模型是由ISO(国际标准化组织)的建议发展起来的,称作“开放式系统互连参考模型” 。OSI模型一
5、共分为7层,如下图,分层的原则主要是: (1) 当需要有一个不同等级的抽象时,就应当有一个相应的层次。(2) 每一层的功能是明确的。(3) 层与层的边界选择应使通过这些边界的信息量尽量少。(4) 层数不能太多或者太少: 层数太少会使每一层的协议太复杂;层数太多,又会是描述合作和各层功能的系统工作任务时,遇到较多的困难。以下简单说明各层及其功能:(1) 物理层向上层提供物理连接,透明传送比特流。(2) 数据链路层负责在相邻的两个站点间无差错的传送以帧为单位的数据。他要负责差错控制,流量控制。(3) 网络层主要功能是从源端到目的端为传送的数据选择一条合适的路由,还要解决拥塞控制问题。(4) 传输层
6、负责为会话层建立一条网络连接,解决流量控制问题。(5) 会话层主要是负责对数据传输进行管理。(6) 表示层主要解决用户信息的语法表示问题。(7) 应用层这一层包括了大量人们需要的协议。应用层确定用户通信的性质以满足用户的需要。2.1.2 TCP/IP模型在目前的计算机网络上被广泛采用的是TCP/IP参考模型,他是一个与OSI模型相比更简单高效的模型,TCP/IP模型是一个四层的模型系统,如下图:TCP/IP最初提出的是协议,模型其实是对已有协议的描述,这里简要介绍TCP/IP四层模型及作用:(1) 网络接口层这一层指出主机必须使用某种协议与网络连接。(2) 互联网层这一层定义了分组格式和协议,
7、及IP协议。(3) 传输层使源端和目的端主机上的对等实体可以进行会话。这里定义了两个端到端协议:TCP和UDP。(4) 应用层它包含所有的高层协议,例如TELNET协议,FTP协议,SMTP协议,HTTP协议等。下图还给出了这两种模型的层次对应关系及比较:2.2 网络应用程序网络应用程序包括两个部分:一部分是服务器端的应用程序;另一部分是客户端的应用程序。但在网络应用程序中,不管是服务器端还是客户端,发送数据是主动的,而接收数据总是被动的。服务器为客户端请求建立一个socket,以处理客户端的数据通信请求。服务器端为了接收客户端的数据,在为客户端建立的socket上建立消息响应函数OnRece
8、ive,用来接受数据。客户端为了接受服务器端的数据,则在连接的socket上,建立一个消息响应函数OnReceive,用来接收数据。一般网络应用程序实现包括以下几个步骤:(1) 建立socket对象:可以使用CAsyncSocket或Csocket建立对象,一般使用Csocket来建立socket对象。(2) 建立连接:客户端必须要连接到服务器端,同时指定服务器地址和端口号。(3) 发送和接收数据。(4) 监听socket:对于服务器端,建立连接后,必须创建监听线程,以便随时能够监测到是否有客户端的连接请求。(5) 为客户端连接请求建立socket队列:服务器端要同时处理多个客户端的请求,与多
9、个客户端实现并行通信,因此监测到有客户端的连接请求,须为每个客户端均建立一个socket,以便通信时不至于发生混乱。2.3 WinSock 编程通过Winsock可实现点对点或广播通信程序,实际这两者之间的区别不大,编程时其程序流程所用代码几乎相同,不同的地方在于目标地址选择的不同。本课程中所举实例为点对点的形式,并以客户/服务器形式来构建通过Winsock进行通信的点对点通信,并对通信过程的两点分别命名为Server和Client。为更清楚的说明出Winsock的结构原理,下面以电信局的普通电话服务为比较对象进行说明:1、电信局提供电话服务类似版主们这的Server,普通电话用户类似版主们这
10、的Client。2、首先电信局必须建立一个电话总机。这就如果版主们必须在Server端建立一个Socket(套接字),这一步通过调用socket()函数实现。3、电信局必须给电话总机分配一个号码,以便使用户要拨找该号码得到电话服务,同时接入该电信局的用户必须知道该总机的号码。同样,版主也在Server端也要为这一套接字指定一port(端口),并且要连接该Server的Client必须知道该端口。这一步通过调用bind()函数实现。4、接下来电信局必须使总机开通并使总机能够高效地监听用户拨号,如果电信局所提供服务的用户数太多,你会发现拨打电信局总机老是忙音,通常电信局内部会使该总机对应的电话号码
11、连到好几个负责交换的处理中心,在一个处理中心忙于处理当前的某个用户时,新到用户可自动转到一下处理中心得到服务。同样版主们的Server端也要使自己的套接口设置成监听状态,这是通用listen()函数实现的,listen()的第二个参数是等待队列数,就如同你可以指定电信局的建立几个负责交换的处理中心。5、用户知道了电信局的总机号后就可以进行拨打请求得到服务。在Winsock的世界里做为Client端是要先用socket()函数建立一个套接字,然后调connect()函数进行连接。当然和电话一样,如果等待队列数满了、与Server的线路不通或是Server没有提供此项服务时,连接就不会成功。5、电
12、信局的总机接受了这用户拨打的电话后负责接通用户的线路,而总机本身则再回到等待的状态。Server也是一样,调用accept()函数进入监听处理过程,Server端的代码即在中处暂停,一旦Server端接到申请后系统会建立一个新的套接字来对此连接做服务,而原先的套接字则再回到监听等待的状态。6、当你电话挂完了,你就可以挂上电话,彼此间也就离线了。Client和Server间的套接字的关闭也是如此;这个关闭离线的动作,可由Client端或Server端先关闭。有些电话查询系统不也是如此吗?关闭套接字的函数为closesocket()从以上情况可以看出在服务器端建立一个套接字,并进入实际的监听步骤的
13、过程如下:socket()-bind()-listen()-accept()那么在accept()完了后,版主们说在Server端将生成一个新的套接字,然后Server将继续进入accept()状态,版主们该如何用这个新的套接字来进行与Client端的通信呢,这就用到了recv()函数,而Client端则是通过send()函数来向服务器发信息的。在客户端也是采取类似的过程,其调用Winsock的过程如下:socket()-connect()-send()首先建立一个socket,然后用connect()函数将其与Server端的socket连接,连接成功后调用send()发送信息。2.4 多线
14、程线程概述进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个
15、进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。这一点在多线程编程时应该注意。Win32 SDK函数支持进行多线程的程序设计
16、,并提供了操作系统原理中的各种同步、互斥和临界区等操作。Visual C+ 6.0中,使用MFC类库也实现了多线程的程序设计,使得多线程编程更加方便。Win32 API对多线程编程的支持Win32 提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作。下面将选取其中的一些重要函数进行说明。 1、HANDLECreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWO
17、RD dwCreationFlags, LPDWORD lpThreadId);该函数在其调用进程的进程空间里创建一个新的线程,并返回已建线程的句柄,其中各参数说明如下:lpThreadAttributes:指向一个 SECURITY_ATTRIBUTES 结构的指针,该结构决定了线程的安全属性,一般置为 NULL; dwStackSize:指定了线程的堆栈深度,一般都设置为0; lpStartAddress:表示新线程开始执行时代码所在函数的地址,即线程的起始地址。一般情况为(LPTHREAD_START_ROUTINE)ThreadFunc,ThreadFunc 是线程函数名; lpPar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息处理 课程设计 实践 报告 聊天 软件设计
链接地址:https://www.31ppt.com/p-2884616.html