基于MFC实现的小型局域网聊天室
2010-06-06王海莉
王海莉,吕 芹
(湖北省咸宁市高级技工学校,湖北 咸宁 437100)
1 聊天室程序的开发背景及意义
近年来,互联网发展日新月异,网络使空间的距离不再成为人们沟通的障碍,世界各个角落的人们可以通过Internet收发邮件、实时聊天、获取最新的资讯,本文将讨论一种基于Socket的局域网通信工具的设计与实现方法。基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好、安全、快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。它很好地诠释了Socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。基于Socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。
2 总体设计
2.1 聊天室的设计目标
本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端。
服务器端功能:初始化Socket,创建服务器端;)维护一个链表,保存所有用户的IP地址、端口信息;接受用户传送来的聊天信息,然后向链表中的所用用户转发;接受用户传送来的连接判断命令,并向用户发出响应命令。
客户端功能:客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息。当按下“发送”按钮时将信息发送给服务器。通过本课题的毕业设计,可以比较深入的了解和掌握Winsock控件基本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。
2.2 聊天室的实现思想
聊天室程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序连接到服务器,就可以与在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。
2.3 聊天室的工作流程
(1)服务器端工作流程。服务器端通过socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行监听listen()。如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。然后登客户端的用户就可以在服务器上聊天了。
(2)客户端工作流程。客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。
2.4 体系结构设计
通常的通信工具,都采用客户机/服务器(C/S)体系结构,C/S结构是这样的一种结构:它包括一个客户机(或前端),一个服务器(或称后端),客户机的作用是访问和处理远程服务器上的数据,服务器的作用是接收和处理客户机的数据请求。有时,可能有多个客户向同一个服务器同时请求服务,这就需要服务器决定怎样处理这些请求。Client/Server结构是当前数据库应用程序中极为流行的一种方式。尤其是网络技术的发展,使得当前很多系统都采用这种方式进行构造,其最大的优点是将计算机工作任务分别由客户端和服务器端来共同完成,这样有利于充分合理的利用系统资源。另外它的服务器端还可以将信息集中起来,任何客户机都可以通过访问服务器而获得所需的信息。Client/Server模型最终可归结为一种“请求/应答”关系。一个请求总是首先被客户发出,然后服务器总是被动地接收请求,返回客户需要的结果。在客户发出一个请求之前,服务进程一直处于休眠状态。一个客户提出请求后,服务进程被“唤醒”并且为客户提供服务,对客户的请求做出所需要的应答。
上述图示只是通信数据的一个流向示意图,不是真正的网络拓扑结构,也就是说其中的服务器可能只是装了服务器软件的一台普通工作站。在底层的数据流向中,也就是网络的物理连结,并非我们这个软件所能决定的,我们的所做都是在一个透明的数据通信层之上的。
3 详细设计
我们利用WinSocket实现一个网络聊天室。需要一个聊天服务器,它可以和很多客户端进行通信,从而把来自不同的客户的聊天信息转交到所有其他的客户端。这样就形成了一个采用Client/Server结构的并可以多人同时在线的聊天室。
3.1 服务器端的实现
服务器端主要用于接收客户端的连接,并转发客户端的信息。服务器端的具体实现过程如下:
(1)利用“MFC App Wizard”创建一个基于对话框的应用程序,在对话框中添加List Box、Edit Box等控件。服务器端对话框界面如1所示。
图1 服务器端界面运行图
3.2 客户端的实现
客户端的主要功能是建立与服务器的连接,面向服务器发送数据,并且能够接收由服务器传送而来的数据。客户端的具体实现过程如下:
(1)利用“MFC AppWizard”创建一个基于对话框的应用程序,在对话框中添加List Box、Edit Box等控件。客户端对话框界面如2所示。
图2 客户端界面运行图
[1]周红进,许江宁.基于WinSock的网络通信模块开发[J].电脑开发与应用,2003,16(10):4-5.
[2]汪晓平,钟军.Visual C++网络通信协议分析与应用实现[M].北京:人民邮电出版社,2003.
[3]Tim Parker.TCP/IP 技术大全机[M].北京:机械工业出版社,2000.