ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:261.90KB ,
资源ID:5379033      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5379033.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(重庆理工大学电子学院即时通信软件设计课程设计论文.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

重庆理工大学电子学院即时通信软件设计课程设计论文.docx

1、重庆理工大学电子学院即时通信软件设计课程设计论文目录前言一、设计目的 1二、设计内容 1三、设计要求 13.1基本要求13.2提高要求1四、设计原理 2五、软件设计55.1软件设计思路 6 5.1.1服务器的实现过程75.1.2客户端的实现过程75.2设计流程图75.2.1服务器流程图75.2.2客户端流程图8六、调试过程9七、实验结果分析11八、体会和建议13参考文献14附录一:服务器端主要源程序清单15附录二:客户端主要源程序清单21摘要:用VC+设计的即时聊天通讯的工具,主要采用client/server结构,并用winsock写实现服务器监听、客户端发送请求信息。服务器端主要完成监听和

2、接收用户的连接请求,以及管理用户之间的通信和用户的状态,比如登陆和退出聊天室。服务器端在启动时先建立一个SOCKET用以监听客户端的连接请求,由客户连接时新建一个SOCKET来进行与用户之间的数据传输,客户退出聊天室时释放该用户占有的SOCKET。客户端主要是客户之间用来法聊天的,客户端启动后首先建立一个SOCKET根据客户输入的服务器的地址和用户名,向服务器发出连接请求,连接成功后就可以用同一个SOCKET用作数据传输,退出聊天室时关闭该SOCKET。一、设计目的通过综合课程设计,使学生能够运用数字信号处理、信号与系统、通信原理、面向对象的程序设计、计算机通信网、通信协议开发及应用等课程的知

3、识来设计一个基于Socket的即时通讯系统,培养学生的动手能力以及分析问题、解决问题的能力。二、设计内容利用vc+/delphi6.0为开发环境的前台开发工具,基于socket接口编程实现服务器与客户端之间的即时通信。并能够编制友好的对话界面,有能力的还可以实现文件、图片的传输,语音的对话等等。三、设计要求基本要求1、熟练掌握面向对象的程序设计方法;2、实现点对点通讯,能进行文字对话传输,包括客户端与服务器端;3、能对系统参数进行配置。提高要求1、实现文件、图片传输;2、语音对话(两人及两人以上);3、友好的对话界面。四、设计原理1:TCP/IP简介 TCP/IP的历史要追溯到70年代中期,当

4、时ARPA为了实现异种网之间的互连(interconnection)与互通(intercommunication),大力资助网间网技术的研究和开发,于1977年到1979年推出目前形式的TCP/IP体系结构和协议规范。到今天,TCP/IP技术以及Internet网间网已经为广大计算机工作者。机算机厂商和机算机用户所接受.据统计,到1990年,Internet以包含遍布欧美的五千个活动网络,超过三十万台机算机。作为一种事实上的工标准,TCP/IP技术方兴未艾。2:TCP/IP的网络分层结构 对TCP/IP协议来说,TCP提供传输层服务,IP提供网络层服务。TCP/IP协议组(或Internet协

5、议组)的分层结构及其与OSI模型的对应关系如图4所示。图中有关协议的名称及其基本含义如下:(1).TCP为传输控制协议(Transmission Control Protocol)。它是提供给用户进程的一个可靠的全双工字节流的面向连接的协议。大多数Internet应用程序使用TCP.因为TCP使用IP,所以整个Internet协议组也常称为TCP/IP协议组。(2).TCP为传输控制协议(Transmission Control Protocol)。它是提供给用户进程的一个可靠的全双工字节流的面向连接的协议。大多数Internet应用程序使用TCP.。因为TCP使用IP,所以整个(3).Int

6、ernet协议组也常称为TCP/IP协议组。(4).ICMP为网间报文控制协议(Internet Control Message Protocol)。(5).IP:网间协议(Internet Protocol).IP协议时为了TCP,UDP和ICMP提供分组发送服务协议。(6).ARP:地址转换协议。(7).RARP:反向地址转换协议3:socket原理Socket编程界面由4BSD UNIX首先提出,目的是解决网间网进程通信问题。Socket接口为进程间通信提供了一种新的手段,它不但能用于同一机器中的进程之间的通信,而且支持网络通信功能。Socket具有类型,反应了对用户透明的通信特性。微软

7、的Windows Socket规范对Berkley的套接字规范进行了扩展,利用标准的Socket的方法,可以同任何平台上的Socket进行通信;利用其扩展,可以更有效地实现在Windows平台上计算机间的通信。在Delphi中,其底层的Socket减轻了编写计算机间通信软件的难度;Delphi中对Windows Socket进行了有效的封装,使得用户可以很方便地编写网络通信程序。Socket通信在Windows中是排队的形式由操作系统处理,而且接收方和发送方相互协同工作,否则就会造成数据丢失。因此,不能用类似于for语句的循环来实现对多组数据的放松,更不能用循环语句来接受数据。另外,和所有的通

8、信编程一样,Socket编程也遵循数据分包传送这一基本规则。也就是说,在socket编程中,每次发送和接受一个包,以保证数据传输的安全性和稳定性,同时也不至于过多地占用系统资源。Socket编程界面由4BSD UNIX首先提出,目的是解决网间网进程通信问题.Socket接口为进程间通信提供了一种新的手段,它不但能用于同一机器中的进程之间的通信,而且支持网络通信功能.Socket具有类型,反应了对用户透明的通信特性.一个完整的Socket连接用一个相关描述: 协议,本地地址,本地端口,远地地址,远地端口 Socket 是面向客户-服务器模型而设计的,针对客户和服务器程序提供不同的Socket系统

9、调用.不管Socket内部机制如何,它提供给应用程序员的最终界面是一组系统功能调用.下面,我们一一给出重要的Socket系统调用.(1).创建 Socket - socket()调用格式如下: sockid = socket (af,type,protocol) af : 地址族,指本socket所用地址类型. type : 类型,指创建socket的应用程序所希望的通信服务器类型. protocol : 协议,指本socket请求的协议.(2).指定本地地址 - bind()调用bind()将本地socket地址与所创建的socket联系起来,即将本socket地址赋予socket,以指定本

10、地半相关.bind()的作用相当于给socket命名,调用格式为: bind (sockid,localaddr,addrlen) sockid : socket号. localaddr : 本地socket地址. addrlen : 地址长度.(3).建立socket连接 - connect () 与 accept ()调用这两个系统调用用于完成整个相关的建立.其中connect用于建立连接 .调用格为: connect (sockid,destaddr,addrlen) destaddr : 指向对方socket地址(信宿地址)结构的指针. accept : 用于面向连接的服务器,其调用格

11、式为: newsock = accept (sockid,clientaddr,paddrlen) clientaddr : 指向客户socket地址指针. paddrlen : 客户socket地址长度.(4).listen() 调用 此调用用于面向连接服务器,表明它愿意接收连接,listen()在accept()之前调用,格式为: listen (sockid,quelen) quelen : 请求队列长度.(5).发送数据 - write(),writev(),send()与sendto(),sendmsg()用于socket数据发送的系统调用一共有五个,其中三个,write(),wri

12、tev()和send()用于面向连接传输,其余两个用于无连接传输.面向连接的调用可以不指定信宿地址,而无连接的调用必须指定.假如无连接socket的双方均调用过connect(),可以认为是建立有连接的socket,也可以面向连接调用发送数据. 三个面向连接调用三者的格式大致相同: write (sockid,buff,bufflen) : 缓冲发送 writev (sockid,iovector,vectorlen) : 集中发送 send (sockid,buff,bufflen,flags) : 可控缓冲发送 其中buff指向发送缓冲区的指针,bufflen是发送缓冲区大小. 用于无连接

13、数据发送的调用有两个: sendto (sockid,buff,bufflen,flags,dsadd,addrlen) sendmsg (sockid,message,flags):可控集中无连接发送.(6).接收数据 - read(),readv(),recv()与recvfrom(),recvmsg()接收数据与发送数据系统调用是一一对应的,两者参数的最大区别是,前者buffer是一个指针,其所指单元初值为欲读数据长度,调用后的值是实际读出的值.4:服务器socket地址的确定在客户-服务器模型中,所有的作用者都是客户首先发起的(如连接请求,服务请求等),因此客户必须要知道服务器sock

14、et地址,另外,客户调用服务器之前,可以在命令行中给出服务器所在主机的域名,根据域名可以获得服务器主机的地址,系统调用为:hp=gethostbyname(host)。其中host可以是服务器主机域名,返回hp是一个指向主机地址结构的指针。五、软件设计在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器模式,即客户向服务器发出服务请求,服务器接受到请求后,提供相应的服务。在该系统中没有采用简单的点对点通信来实现,而采用了比较典型的客户/服务器模式,因为网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不分享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系

15、,为二者的数据交换提供同步,这就需要借助服务器模式来实现这一功能。Socket实现通信时,服务器端先初始化socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器的连接就建立了。客户端发送数据请求,服务器接受请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。其实现通信的过程如下图所示:图1.Socket实现过程示意图5.1软件设计思路 用VC+的MFC设计对话聊天软件,要经过界面设计,重载函数

16、,映射控件,编辑函数等几个步骤。设计服务器时,先生成对话框,然后添加两个按钮分别命名为“启动服务器”,“关闭服务器”。“启动服务器”按钮的导向功能是,启动后,服务器自动进行初始化,并创建、绑定套接字,然后进入监听状态,服务器自动进行初始化,点击开始按钮后,服务器创建套接字、绑定、然后进入监听状态,等待客服端连接请求,当有客户端连接时,服务器读取客户端的信息,并读取显示客户端成员信息于列表中。“关闭服务器”的导向功能是,点击后,程序自动关闭套接口和退出服务器。添加一个列表框用于显示读取到的客户端的信息,然后打开类向导,为列表框添加一个成员变量命名为m_msg。新建一个派生于CAsyncScoke

17、t类的新类CNewSocket,此类用于与客户端通信,重载CAsyncScoket的虚函数OnOpen()和OnClose(),当服务器监测到有客户端建立连接时自动调用OnOpen()接收数据并显示在列表框中,服务器的作用是转发数据。客户端与服务器建立原理机制一样,先MFC建立窗口,然后添加三个编辑框“信息显示栏”、“列表框”、“消息编辑框”,两个按钮“发送”、“退出”,两个列表“在线用户列表”、“选择发送对象栏”。“信息显示栏”用于显示接收和发出的消息,“列表框”用于显示在线用户,“消息编辑框”用于编辑待发送的消息,“选择发送对象栏”用于选择发送数据的接收方。5.1.1服务器的实现过程:(1

18、):打开一个通信通道(本机的某一端口地址)并告知本地主机,它将在某一公认端口号上接受客户请求;(2):等待客户请求到达该端口;(3):接受到重复服务请求,处理该请求并发送应答信号。服务完成后,关闭此进程与客户端的通信链路,并终止;(4):返回第二步,等待另一客户请求;(5):断开服务器5.1.2客户端的实现过程:(1):打开一个通信信道,并连接到服务器所在主机的特定端口(可以通过所在服务器的IP地址来进行连接)。(2):向服务器发送服务请求;(3):等待服务器端做出相应的处理并接收应答;继续提出请求(4):请求结束后关闭通信信道并终止连接;5.2软件设计流程图 5.2.1服务器流程图图2.服务

19、器端软件流程图 5.2.2客户端流程图图3.服务器端软件流程图六、调试过程: 在调试中发现,如果忽略下面任何一个环节,都将导致程序编译无法通过,其中主要是语法错误、逻辑错误、设置错误等类型:1.在CChatServerDlg类头文件中枚举类型申明函数enum后面对函数中的成员变量以及数据包进行申明。如本程序中加入SOCKET SocketAccept20;SOCKET SockettoListen; SOCKADDR_IN myaddr,clientaddr;等函数体2.对CChatserverDlg的初始化函数OnInitDialog()中正加如下代码: for(int i=0;i20;i+

20、) SocketAccepti=INVALID_SOCKET;3.没有绑定窗口中各个需要控件的成员变量而直接在程序中使用,会导致连接时程序找不到映射体而失败。4.添加自定义消息时的三个步骤,在.H和.cpp中有三个地方添加:1.消息函数的定义处;2.消息函数映射表处;3.消息函数的申明处本设计程序中的两个自定义函数:添加由用户请求连接时的响应函数:LRESULT CChatserverDlg:OnServerAccept(WPARAM wParam, LPARAM lParam)添加消息和用户的管理函数:LRESULT CChatserverDlg:OnServerreadorclose(WP

21、ARAM wParam, LPARAM lParam)在CChatserverDlg.h头文件中有申明:afx_msg LRESULT OnServerAccept(WPARAM wParam, LPARAM lParam);afx_msg LRESULT OnServerreadorclose(WPARAM wParam, LPARAM lParam);在CChatserverDlg.cpp中也有如下申明:ON_MESSAGE(WM_SERVER_ACCEPT, OnServerAccept)ON_MESSAGE(WM_SOCKET_READ, OnServerreadorclose)5.窗

22、体控件一定要进行成员名设定(如果需要成员变量的),否则在函数编译连接的过程中将会因找不到该函数的申明而报错。如在调试过程中发现m_send = _T();m_read = _T();m_me = _T();三个函数未定义;原因是没有关联成员变量,在窗口中对个相应控件进行关联即解决。6.同时在对空间进行代码连接时,要在类向导的message Maps选项卡里面进行成员功能名得设定,平台会自动生成控件功能函数,编辑功能函数,如果是按键空间,者当点击该空间时,就会自动运行该函数中的程序。7.如果出现连接错误,那么可能是兼容性问题,也可能是软件安装问题,可以很遗憾的告诉你,你的这个问题可能无解;8.C

23、lass中包含了服务器端的所有类和对象的定义,还有全局函数。Fileview中包含了服务器端的所有代码文件,.h结尾的是头文件,类似于C语言中#inclue的头文件,.cpp结尾的程序文件了,是系统的主要部分,体现了各程序文件之间的调用情况,只用修改source和header部分内容。Resource中包含了弹出的那些窗口文件,可进行相应的修改。七、实验结果分析:图4.运行服务器端后图5.启动服务器:图6.启动客户端程序:填写服务器IP和自己的用户名并连接服务器图7.连接服务器成功后提示框图8.连接服务器后两个客户端的通信信息显示1图9.连接服务器后两客户端的通信信息显示2本设计完成了课题的基

24、本要求,客服端可以通过输入IP地址连接到服务器,连接成功后也可以实现数据的收、发和显示。服务器端可以接受连接请求,连接建立后接收数据,显示数据,并转发数据。各部分效果图如上所示,服务器和客服端除了显示接受数据和相应提示语外,还显示当前时间。对话界面相对友好,按钮设计较为完整,可以满足点对点对话的基本需求。但由于各方面原因,未能完成发挥部分。由上可以看出,相较于QQ或MSN软件的对话框,设计的即时通信系统,能够完成简单的两台机子间的对话,但还是存在很多的不完善,比如还不能进行文件和图片的发送以及语音聊天功能的实现,还需要对更高级的实现进行探索。虽然在vc+中使用MFC类库进行即时通信软件的设计很

25、方便,但是要真正熟练运用它来实现网络应用程序的开发,则还需要掌握vc+中种类繁多的库函数,以及其他各类控件。结合本即时通信系统的设计,可以对vc+中winsocket编程做如下总结:1:数据收发是通过会话建立和撤销的;2:客户端是主动连接,服务程序是被动连接,服务器既可以单独设计,也可以设计一个客户端即作为客户端也作为服务器的一体;3:每次收发的数据包,不必关心其大小,socket会自动将它分割成合适的TCP报进行发送,然后会根据接收到的TCP报拼装之后提交用户;4:一个ClientSocket只能建立一个与ServerSocket的连接;5:一个ServerSocket可以建立多个与Clie

26、ntSocket的连接;6:每一对连接都有唯一用于该连接的一对Socket,可以通过Data属性进行标记区分;八、体会和建议:体会:在为期的两周的课程设计中,我对计算机网络通信即VC+编程有了更进一步的了解,并能够实现网络中的计算机之间的简单通信,在这个课程设计期间,我充分地利用了课本上和参考书上的知识。由于没有VC+的相关知识,同时也没有winsocket编程的实际操作经验,最开始得知设计的题目后感到的茫然不知所措,促使我到图书馆,书店或者网络上查阅相关的资料,收集有关网络编程的基本原理方法等方面的资料,以及IP协议,ICMP协议文本。时刻对照老师给的进度安排来调整自己的进度,但现在一步一步

27、的把对话系统编制出来,慢慢的对VC+平台有了一个大致的了解,并学会了一些基础的操作。以及能够较为熟练的操作VC+实现一些较为简单即时通信软件的编写。不敢说自己学到了很多,但是知识在于积累。虽然老师让我们尽量采用delphi软件进行设计,但是由于以前有一点点c的基础,加上VC+类得资料比delphi更容易查到,而且效果也很不错,于是选择了VC+。其实能进行此类通信软件设计的还远不止这两个平台,比如JAVA,VB等都可以实现,但是由于自己知识的积累不够,对于这些语言更是不了解,因此最终决定在网络代码的基础上,运用VC+来实现基本数据传输功能。从选择平台的角度来看,我们平时在学专业上的知识的同时还得

28、多多的学习其它有用的东西。在遇到困难的时候要调整好自己的心态,不要着急,要慢慢的一步一步的去解决。虽然遇到过很多困难,但在老师和同学们的帮助之下都一一解决了,在这里我要感谢他们的帮助,同时也是我认识到书本知识的重要性,这对于我以后的学习将会有十分巨大的作用。建议:可以加长课程设计的时间,像老师说的,搞一个较大的课程,让学生根据实际情况进行分组,这样能够加强学生对追求知识的激情。建立让每一个学生都能够进行答辩这一个过程,为下学期的毕业答辩做准备,让我们能够提前熟悉这样的过程,不至于到毕业答辩时因紧张而不能发挥出自己的真实水平。另外,我相信还是有很多同学像我一样只做出了简单的对话环节,对于图片和文

29、件的传输,语音的对话都还没有做出来,如果条件允许的话,让做出来的同学或者老师给我们演示一下,加深我们的印象。参考文献:1:邱仲潘,柯渝.Visual C+ 6从入门到精通,北京:电子工业出版社,2005;2:沈金龙.计算机通信网M,西安:西安电子科技大学出版社,2008;3:任泰明. 计算机通信网M,西安:西安电子科技大学出版社,2009;4:王丰锦,邵新宇.基于SOCKET 和多线程的应用程序间通信技术的研究J.计算机应用,2000,20(6):65-67.5:TCP/IP协议与网络编程,任泰明,西安电子科技大学出版社,2004年;6:张曜,郭立山,谭超强. C+函数实用手册,北京:冶金工业

30、出版社,2003;7:汪晓平,刘韬. 开发网络典型应用实例导航,北京:人民邮电出版社,2005;附录一:服务器端主要源程序清单在CChatServerDlg类的头文件中加入如下变量定义:public: CChatserverDlg(CWnd* pParent = NULL); enum IDD = IDD_CHATSERVER_DIALOG ; SOCKET SocketAccept20; SOCKET SockettoListen; SOCKADDR_IN myaddr,clientaddr; struct sendinfo int type; char name20; char msg200

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1