基于Socket的即时通讯系统
⼀、设计⽬的
通过综合课程设计,使学⽣能够运⽤《数字信号处理》、《信号与系统》、《通信原理》、《⾯向对象的程序设计》、《计算机通信⽹》、《通信协议开发及应⽤》等课程的知识来设计⼀个基于Socket的即时通讯系统,培养学⽣的动⼿能⼒以及分析问题、解决问题的能⼒。
⼆、设计内容
设计⼀个基于Socket的即时通讯系统。
三、设计要求
(⼀)基本要求
1.熟练掌握⾯向对象的程序设计⽅法;
2.实现点对点通讯,能进⾏⽂字对话传输,包括客户端与服务器端;
3.能对系统参数进⾏配置。
(⼆)提⾼要求
1、实现⽂件、图⽚传输;
2、语⾳对话(两⼈及两⼈以上);
3、友好的对话界⾯。
四、设计原理
(⼀)开发环境
我所设计的是⼀个⾯向中⼩型机构内部通信需求的局域⽹即时信息软件,要在短时间内开发出来并且要满⾜客户要求,⽆论是硬件还是软件都要选择合适,要求如下:开发设备应该完备;开发机器的性能必须稳定;操作系统的选择应该适当;开发出的程序可以在尽可能多的平台上运⾏;要求运⾏机配置尽可能低档。对此,我们选择的硬件环境和软件环境如下:
1、硬件环境
处理器:Intel Pentium PIII或更⾼处理器
内存:256MB或更⾼
⽹络:局域⽹
开发该系统应尽可能采⽤⾼档的硬件。因此,在应⽤时应采⽤更好的配置。
2、软件环境
socket编程聊天室基本流程
操作系统:Windows 2000 /Windows XP / Windows 2003
开发平台:Microsoft Visual C++ 6.0
开发语⾔:C++
(⼆)关键技术
1、Visual C++和⾯向对象程序设计
VC基于C,C++语⾔,主要由是MFC组成,是与系统联系⾮常紧密的编程⼯具,它兼有⾼级,和低级语⾔的双重性,功能强⼤,灵活,执⾏效率⾼,⼏乎可说VC在 Windows平台⽆所不能。从20世纪70年代第⼀次提出⾯向对象的概念开始,到现在⾯向对象技术发展成为⼀种⽐较成熟的编程思想,通过
⾯向对象技术,
可以将现实世界直接影射到对象空间,从⽽为系统的设计和开发带来⾰命性的影响。Visual C++是⼀个典型的⾯向对象程序的设计语⾔,它也是⽬前为⽌功能最强、最受欢迎、应⽤最⼴泛、⾼效的Windows应⽤程序开发⼯具,它是在C 语⾔基础之上发展起来的,是C语⾔的超集。
Visual C++是功能最为强⼤可视化开发⼯具,它不仅⽀持传统的软件开发⽅法,更重要的是它能⽀持⾯向对象、可视化的开发风格。因此Visual C++⼜称作是⼀个集成开发⼯具,它提供了软件代码⾃动⽣成和可视化的资源编辑功能。Visual C++具有的优点:提供了⾯向对象的应⽤程序框架MFC(Microsoft Foundation Class),简化了程序员的编程⼯作,提⾼了模块的可重⽤性;提供了基于CASE 技术的可视化软件的⾃动⽣成和维护⼯具AppWizard、ClassWizard、Visual Studio、WizardBar等,实现了直观、可视的程序设计风
格,⽅便地编和管理各种类,维护程序的源代码;封装了Windows的API函数、USER、KERNEL、GDI函数,简化了编程时创建、维护窗⼝的许多复杂的⼯作。
2、M F C
MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,⽤于在C++环境下编写应⽤
程序的⼀个框架和引擎,VC++是WinDOS下开发⼈员使⽤的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC 就是挂在它之上的⼀个辅助软件开发包,MFC作为与VC++⾎⾁相连的部分(注意C++和VC++的区别:C++是⼀种程序设计语⾔,是⼀种⼤家都承认的软件编制的通⽤规范,⽽VC++只是⼀个编译器,或者说是⼀种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Delphi的关系⼀个道理,Pascal是Delphi的语⾔基础,Delphi使⽤Pascal规范来进⾏Win下应⽤程序的开发和编译,却不同于Basic语⾔和VB的关系,Basic语⾔在VB开发出来被应⽤的年代已经成了Basic语⾔的新规范,VB新加的Basic语⾔要素,如⾯向对象程序设计的要素,是⼀种性质上的飞跃,使VB既是⼀个IDE,⼜成长成⼀个新的程序设计语⾔),MFC 同BC++集成的VCL⼀样是⼀个⾮外挂式的软件包,类库,只不过MFC类是微软为VC++专配的..
3、 WINDOWS SOCKETS⽹络编程接⼝
选定WINDOWS平台开发⽹络通信程序,可以选择WINDOWS的SOCKETS编程接⼝,Windows Sockets是⼀套开放的、⽀持多种协议的Windows下的⽹络编程接⼝。现在的Winsock已经基本上实现了与协议⽆关,你可以使⽤Winsock来调⽤多种协议的功能,但较常使⽤的是TCP/IP协议。Windows sockets⽆疑是我们进⾏⽹络编程的利器。所有的Windows Sockets实现都⽀持流套接⼝和数据报套接⼝。应⽤程序调⽤Windows Sockets的API实现相互之间的通讯。Windows Sockets
⼜利⽤下层的⽹络通讯协议功能和操作系统调⽤实现实际的通讯⼯作。它们之间的关系如下图所⽰:
Windows Sockets实现通讯⼯作的各层关系图
3、WSAAsyncSelect模型开发
WSAAsyncSelect()调⽤允许应⽤程序程序注册⼀个或多个感兴趣的⽹络事件。这⼀API调⽤⽤来取代
探寻⽹络I/O调⽤。在select()或⾮阻塞I/O例程(例如send()和recv())已经被调⽤或将要被调⽤的情况下都可以使⽤WSAAsyncSelect()调⽤。在这种情况下,在声明感兴趣的⽹络事件时,你必须提供⼀个通知时使⽤的窗⼝句柄。那么在你声明的感兴趣的⽹络事件发⽣时,对应的窗⼝将收到⼀个基于消息的通知。其过程如下图所⽰:
WSAAsyncSelect 模型 4、TCP/IP 协议、TCP 协议
⽹际协议IP 是TCP/IP 的⼼脏,也是⽹络层中最重要的协议。
IP 层接收由更低层(⽹络接⼝层例如以太⽹设备驱动程序)发来的数据包,并把该数据包发送到更⾼层---TCP 或UDP 层;相反,IP 层也把从TCP 或UDP 层接收来的数据包传送到更低层。IP 数据包是不可靠的,因为IP 并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP 数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(⽬的地址)。
如果IP 数据包中有已经封好的TCP 数据包,那么IP 将把它们向‘上’传送到TCP 层。TCP 将包排序并进⾏错误检查,同时实现虚电路间的连接。TCP 数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,⽽损坏的包可以被重传。
UDP 与TCP 位于同⼀层,但对于数据包的顺序错误或重发。因此,UDP 不被应⽤于那些使⽤虚电路的⾯向连接的服务,UDP 主要⽤
于那些⾯向查询---应答的服务.
TCP 和UDP 服务通常有⼀个客户/服务器的关系。两个系统间的多重连接是这样相互确认并协调⼀致的,TCP 或UDP 连接唯⼀地使⽤每个信息中的如下四项进⾏确认:
源IP 地址发送包的IP 地址。
⽬的IP地址接收包的IP地址。
源端⼝源系统上的连接的端⼝。
⽬的端⼝⽬的系统上的连接的端⼝。
端⼝是⼀个软件结构,被客户程序或服务进程⽤来发送和接收信息。⼀个端⼝对应⼀个16⽐特的数。服务进程通常使⽤⼀个固定的端⼝,例如,SMTP使⽤25。这些端⼝号是“⼴为⼈知”的,因为在建⽴与特定的主机或服务的连接时,需要这些地址和⽬的地址进⾏通讯,图如下所⽰:
⾯向连接的(TCP)连接过程
5、Client/Server结构(客户机/服务器模式)
Client/Server结构(C/S结构)是⼤家熟知的客户机和服务器结构。通过它可以充分利⽤两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。⽬前⼤多数应⽤软件系统都是Client/Server形式的两层
结构。
C/S结构软件分为客户机和服务器两层,客户机不是毫⽆运算能⼒的输⼊、输出设备,⽽是具有了⼀定的数据处理和数据存储能⼒,通过把应⽤软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低⽹络通信量和服务器运算量。由于服务器连接个数和数据通信量的限制,这种结构的软件适于在⽤户数⽬不多的局域⽹内使⽤。
C/S结构的优点是能充分发挥客户端PC的处理能⼒,很多⼯作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下⼏个:只适⽤于局域⽹。⽽随着互联⽹的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种⽅式远程访问需要专门的技术,同时要对系统进⾏专门的设计来处理分布式的数据。
五、软件设计
(⼀)系统分析
1、系统需求
聊天交流是⽬前互联⽹提供的主要内容。聊天系统有多种实现⽅式,类似ICQ 属于⼀种点对点的聊天系统;还有⼀种是基于Socket的集中式聊天系统,这种聊天系统需要登陆统⼀的聊天服务器。在基于Socket的聊天系统中,主要有两种⾓⾊:服务器和客户端,不同
的客户端登陆集中式的服务器,通过服务器将⼀个客户端发出的信息推送到其他所有客户端。
基于Socket的聊天系统最早实现是使⽤⽹页刷新⽅式,通过客户端不断地⾃动刷新,服务器端整个页⾯内容下载到客户端显⽰,这种⽅式的聊天速度慢,⽽且有刷屏现象,很快被更新的聊天技术所替代。
聊天系统在客户端和服务器之间主要传送的是⽂字信息,服务器端只需要把最近的⽂字信息推送到客户端,这样减少了⽹络传输内容,节省了⽹络传输的时间,⽆疑提⾼了聊天速度。这种“推”技术是⽬前基于Socket聊天系统的主要实现技术。
在基于Socket的聊天系统,客户端和服务器必须保持随时随地的连接。这有别于普通Web浏览的连接⽅式。在使⽤浏览器访问服务器时,先由客户端发出HTTP协议,然后服务器响应处理这个客户端的响应,再返回处理结果;请求(Request)和响应(Response)是⼀种⼀对⼀的前后因果关系。⽽在基于Socket 的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的其他⼈的聊天信息,因此,请求和响应不存在那种前后对应关系,是两种分别独⽴进⾏的进程。因为服务器任何时候都可能发送信息到客户端,因此,客户端和服务器⼀旦建⽴连接,必须能让服务器在以后发送中寻定位到这个连接。
局域⽹聊天系统使该系统的⽤户能够通过客户端登⼊到该系统,然后直接与系统交互。⾸先,需启动服务器,进⾏服务器的配置,进⾏正确的服务器配置和数据库连接并测试成功后,开启服务器。接下来,在客户端,该系统的⽤户能够通过登陆界⾯进⼊,然后直接与系统交互,进⾏⽂字传送。本系统⽀持的活动列表如下:
(1)配置服务器,设置IP及端;
(2)开启服务器;
(3)⽤户登陆系统;
(4)⽤户与系统交互,进⾏⽂字传送;
(5)⽤户好友登陆后,⾃动刷新列表;
2、需求分析
客户端实现功能:
(1)向在线成员发送消息并接收消息。
(2)更新成员状态。当其他成员上线或下线时,客户端及时更新成员状态。(3)更新成员列表,当其他成员加⼊或者偶成员被删除时,客户端及时更新成员列表。
(4)当对⽅不在线时,可以向该成员发送离线消息。
(5)当⽤户上线时,接受其他⽤户的离线消息。
(6)保存聊天记录。
服务器端实现功能:
(1)维护聊天室成员列表:包括接受新成员,删除已有成员。
(2)通知客户端更新成员状态。
(3)通知客户端更新成员列表。
(4)为离线⽤户保存离线消息。
(5)验证密码。
(6)禁⽌已登陆⽤户再次登陆。
(7)保存⽤户信息。
(8)为⽤户保存离线消息。
(⼆)系统设计
1、设计原则
考虑到系统的可重⽤性和伸缩性,需要将本系统的⽹络通信底层和应⽤系统分离开。这样,基于可重⽤的⽹络通信层,可以实现其他各种实时性较⾼的应⽤系统。
本系统在架构设计上将分4个层次,如下图所⽰:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。