1、第 28章 聊天室的设计与实现网络聊天已经成为人们休闲、交流的一种重要方式。本章将介绍一个很实用的网络应用程序:基于客户端 /服务器模式的聊天室。这个应用程序包括服务器端应用程序和客户度端应用程序两部分,都是基于 CSocket类开发的。28.1 聊天室 程序功能说明服务器端聊天程序负责接收来自客户端的聊天信息,并把这些信息转发到其他聊天客户端中。客户端聊天程序负责建立和维护与服务器端的连接,向服务器端发送聊天内容,同时接收来自服务器的聊天信息。28.1.1 服务器端功能介绍服务器端的界面如图 28.1所示。服务器程序可以指定特定的端口号,以监听客户端的连接请求,并且需要维护一个客户端的连接表
2、,以记录所有成功的连接。服务器程序要能够及时接收从各客户端发送过来的信息,然后把这些信息转发给其他已连入的客户端。服务器端还要能够维护连接表, 在客户端断开连接时从列表中删除相应的表项,并及时更新连接表。28.1.2 客户端功能介绍客户端程序的主界面如图 28.2所示。客户端启动后,需要根据用户的设置,建立与服务器的连接。建立连接后,能够将用户输入的信息发送给服务器,并能够接收来自服务器的消息。在用户突出聊天室时,要关闭与服务器的连接。28.1.3 消息类的定义为了便于处理需要发送和接收的信息,通常把它们封装成一个类。本示例中,将它们封装成为了一个 CMessage类,该类基于 Cobject
3、类,具体代码如下所示。28.2 服务器端应用程序下面介绍服务器端应用程序的开发过程和主要代码。28.2.1 建立服务器应用程序框架下面列出的是创建服务器应用程序的具体步骤。28.2.2 侦听套接字类在服务端添加名为 CListenSocket的类,该类派生于 CSocket类,用于监控客户端连接的状态,在客户端断开连接时从连接列表中删除相应的项。 CListenSocket类定义如下所示。28.2.3 客户套接字类在服务端添加名为 CClientSocket的类,该类派生于 CSocket类,用于建立与客户端的连接,及发送接收客户端套接字的消息。 CClientSocket类定义如下所示。28.2.4 服务器主界面类系统主界面类 CServerDlg,包含了对 【 建立服务 】 、 【 停止服务 】 按钮的单击事件的处理函数及相关配套函数。