1、操作系统实验报告 1 1 实实 验验 报报 告告 | | 实验名称实验名称 网络聊天室网络聊天室的实现的实现 课程名称课程名称 计算机操作系统计算机操作系统 | | 操作系统实验报告 2 2 目目 录录 【1】 设计原理4 【2】 程序流程图9 【3】 设计步骤10 【4】 使用方法说明21 【5】 实验结果及分析24 操作系统实验报告 3 3 设计原理设计原理 计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还 是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件也同时诞生,而且为 我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯 QQ、微软的 MSN
2、、移动的 Fetion 等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出 不穷,接下来的课程设计就是针对一个简单的网络聊天程序,利用 MFC 为开发工具,实现 基本的通讯功能。 此程序主要分为两部分:服务器端和客户端。服务器端用于提供一个网络端口,等待 客户端发出请求,登录到此服务端,然后进行网络通讯和消息的转发;客户端可通过服务器 端的 IP 地址发送连接请求,然后登陆聊天室。在服务器端的成员列表栏中会显示在线的所 有人名单,有人退出聊天室,成员列表会自动除名。服务器端同时也提供了成员之间的私聊 功能,此时服务器端作为一个转发站,进行消息的转发。整个程序的主体使用了
3、 CSocket 类的方法,实现了网络通讯聊天。 整个程序设计为两个部分:服务器 (ChatServer)和客户端 (Chat) 多人聊天的关键在于要将每个客户端发送过来的消息分发给所有其他客户端, 为了解决 这个问题, 在服务器程序中建立一个套接口链表, 用来保存所有与客户端建立了连接的服务 端口。下面描述了多人聊天的实现原理: 当客户端 Client N 向对应的服务端口 N 发送了消息 Message,服务端口 N 将 Message 复制给所有套接口列表(USERLIST)中的套接口缓冲区,然后向每个服务端口发送 WRITE 消息,使每个服务端口将 Message 发送给对应的客户端。
4、这样,所有客户端就都获得了 Message 消息,实现了多人聊天功能。 BOOL CClientSocketList:Sends(char *buff,int n) CClientSocket *curr=Head; while (curr) curr-Send(buff,n); curr=curr-Next; return true; USERLIST 表时多人聊天程序的核心, 它是一个动态变化的链表, 为空表示没有客户端 建立了连接,不为空时每个元素就代表有一个客户端与服务器建立了连接。 操作系统实验报告 4 4 以下程序是私聊功能的实现: BOOL CClientSocketList:O
5、nlySend(char *buff,int n,int who) CClientSocket *curr=Head; while (curr who-; curr-Send(buff,n); return true; 以下是此程序的效果截图: 服务器端的效果截图 操作系统实验报告 5 5 用户“yq”的登录界面 操作系统实验报告 6 6 用户“zxl”的登录界面 操作系统实验报告 7 7 功能描述功能描述 1、 多人会话。此程序分为服务器端和客户端,当客户端要进入聊天室的时候,就 必须通过网络连接到服务端,以实现和其它客户端的通讯功能。其中最简单的 一种通讯方式就是多人会话,运用多线程同时对
6、多个用户的信息进行监听,服 务器通过转发消息,让所有人都可以得到消息,实现多人会话。 2、 一对一会话。此程序的服务器端除了能够提供多人会话的功能外,还提供了私 人聊天功能,可以实现一对一的聊天。就是在消息转发的时候,私聊的消息只 发给私聊的对象,而其他人看不到此消息,但是此消息会通过服务器端转发, 然后再到达目的客户端。 3、 个性化的昵称。为了区别用户,此程序还允许用户可以自定义个性化的昵称。 在用户登录的时候,用户可以为自己设定一个昵称,以便在多人会话的时候作 为身份识别。同时服务器端也会以此昵称作为客户端的登录身份,服务器管理 员,同样也显示在其他用户的在线列表栏中。 4、 服务器登陆。服务器端开启之后处于监听状态,多线程工作,接受每一个用户 的连接请求。 而客户端只需输入服务器端的