已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘摘要要 随着计算机科学和 Internet 的飞速发展 网上聊天已成为人们相互交流的一种 重要方式 与 E mail 电话相比 聊天服务更具有实时性和有效性 即时通信的快捷 廉价 隐蔽性等特点 在网络上人们可以突破年龄 身份 行业 地域的限制 达到人与人之间的零距离交流 使得人们的沟通更加方便 快 捷 截止到目前 全球约有近 3 亿多人使用即时通讯软件进行交流 本论文是关于一个小型即时网络通信系统软件的设计与实现 首先介绍了设计 的来源和意义 然后是即时通讯软件的现状 以及设计中使用的技术原理 包括客 户 服务器模式 C S 结构原理 TCP IP 协议的体系结构 C 网络编程 套接字 多线 程技术等 然后详细分析了系统的整体设计 包括系统的功能介绍 实现思想 系 统的需求分析 系统通信协议的设计 各个模块的体系结构 在文中提供了部分功 能模块实现的源代码 最后 本文还粗略地探讨了软件的测试用例设计和完成此次 设计的心得体会 在此要指出本软件只实现了聊天的基本功能还有很多不足之处需 要改进 关键字 C S 结构 TCP IP 协议 即时通信 套接字 AbstractAbstract Along with the high speed development of the computer science and Internet chatting on line has been an important method in our communication Comparing with E mail and telephone the chat line service is more real time and effective Instant communication with fast cheap concealment etc makes people to communicate with each other more convenient and faster in a zero distance which breaks the restrictions of age identity industry and regional Up to now nearly 3 billion people around the world to use instant messaging software to communicate The paper is about the design and realization of instant messaging software First this paper introduced topic origin and the topic significance and the status of instant messaging software As well as the principle and the technology that adopted in the paper Including Customer Server C S structure principle TCP IP protocol system structure C network programming socket multithread technique and so on Then author analyzes that the overall design Including system function introduction realization way demand analysis communication agreement design system structure of each module In the paper we provide some source code with achieving part of function modules At last we can learn experience in this designing and roughly discuss software test example designing In this to point out the software has only completed the basic function as a chatting system so it need much more improvement Key words the C S Structure the TCP IP Protocol Instant Messaging Socket 目 录 第一章 绪论 1 1 1 即时通讯软件设计的意义及来源 1 1 2 即时通讯软件的现状 1 1 3 客户 服务器模式的基本概念 2 1 4 功能的实现及使用的技术 2 1 4 1 服务器部分 2 1 4 2 客户端部分 3 1 5 设计工作的概要介绍 3 第二章 相关开发技术的原理性说明 4 2 1 MFC 简介 4 2 2 MFC 与 C 语言 API 的关系 4 2 3 TCP IP 协议 4 2 3 1 TCP IP 协议参考模型的层次结构 4 2 3 2 TCP IP 协议的通信方式 6 2 4 SOCKET简介 7 2 4 1WINDOWS SOCKETS 简介 7 2 4 2 相关 MFC 类 8 2 4 3 Socket 的类型 8 2 4 4socket 函数 9 2 4 5 阻塞和非阻塞 9 2 5 多线程技术 10 2 5 1 进程及线程概述 10 2 5 2 MFC 对多线程编程的支持 10 第三章 总体规划与设计方案 12 3 1 需求分析 12 3 1 1 功能需求 12 3 1 2 环境需求 12 3 1 3 性能需求 12 3 1 4 界面需求 13 3 1 5 用户需求 13 3 2 方案的选择以及模块设计 13 3 2 1 系统整体结构 13 3 2 2 系统的信息传递过程 15 3 2 3 系统初始化 16 3 2 4 用户上下线动态管理 16 3 2 5 程序中主要变量及类的功能说明 18 第四章 详细设计 19 4 1 登录设计 19 4 1 1 登录框界面设计 19 4 1 2 登录功能的实现 19 4 2 聊天设计 20 4 2 1 聊天界面的设计 20 4 2 2 聊天功能的实现 22 第五章 测试 25 5 1 黑盒测试 25 5 2 白盒测试 25 结束语 26 致谢词 26 参考文献 27 附录 28 1 第一章 绪论 1 1 即时通讯软件设计的意义及来源 即时通讯软件是通过即时通讯技术来实现在线聊天 交流的软件 从 80 年代 后期 尤其是 90 年代至今 基于 TCP IP 协议的即时通信系统获得了更为广阔的发 展空间 尤其是移动互联网的发展 标志着以 互联网 方便 时尚 为特征的后 PC 时代的到来 网上聊天的主要工具已经从初期的聊天室 论坛变为以 MSN QQ 为主要特征的网络即时通信 Instant Messaging 缩写为 IM 是以 Internet 网络及其它有线 无线网络为基础 实现交互双方文字 文件 语音等 信息实时传送的通信过程 即时通信系统的最大特点就是能在网上进行信息的实 时交流 与传统的通信方式相比 即时通信具有快捷 廉价 隐蔽性等特点 在网 络上可以跨年龄 身份 行业 地域的限制 达到人与人之间的零距离交流 使得 人们的沟通更加方便 快捷 最大程度的体现了网络给人们生活带来的翻天覆地变 化 即时通讯软件 几乎是每一个上网用户都必备的联络工具 它除了能够让我们 迅速地在网上找到自己的朋友和工作伙伴外 还可以实时交谈和传递信息 而且 现在不少即时通讯软件还集成了文件共享 语音聊天 网络会议等功能 截止到目 前 全球约有近 3 亿多人使用即时通讯软件进行交流 1 2 即时通讯软件的现状 广域网上的即时通信工具 如今一般采用 UDP 或者 TCP 协议体系来实现 开 发技术已经比较成熟 比如较早的 ICQ MSN Messenger YAHOO 通等国外开发的产 品 还有国产的有名的 QQ 新浪 UC LAVA LAVA 等 这些工具统统都实现了广域 网上的即时通信 尽管都是即时通信 实现了即时聊天 以及文件传输的主要功能 但是也各有各的特色 比如 ICQ 的巨大客户群 MSN 的个性化表情 YAHOO 通的易 操作性等 而 QQ 也具有一个相当方便的屏幕截图功能 另外就是 所有上述软件 都实现了网络即时的视频 语音聊天功能 这些软件 在使用方面各有特色 在实 现方面也各有所长 但由于这些产品正在商业运营阶段 其实现方式属于商业机密 具体细节不可能得知 但是它在大的方面无非就是各种利用各种平台上的网络通信 接口 建构基于下层 TCP IP 或者 UDP IP 协议的软件产品 2 现代社会随着网络通信技术的进一步发展和互联网的普及 会有更多的网络用 户 同时也会有更多的即时通讯软件出现 因此 需对现有的即时通讯软件进行研 究和设计 以适应新的用户需求 1 3 客户 服务器模式的基本概念 在客户 服务器模式中 客户与服务器分别表示相互通信的两个应用程序进程 客户向服务器发出服务请求 服务器响应客户的请求 提供客户所需要的网络服务 客户 服务器模式的进程相互作用如图图 1 1 1 图 1 1 客户 服务器模式的进程相互作用 1 4 功能的实现及使用的技术 本设计所设计的软件以简单的 c s 经典网络通信结构为基础 有较强的通信 能力 特别是文本通信 以信息框的形式显示传输信息 易于用户读取与接收信息 本设计利用最基本的 TCP 通信协议实现客户端和服务器端的文本传输 本设计将客户端和服务器做到了一起 使用时由用户自行选择 为方便说明客 户端 服务器的概念 下面将分别简单讲述两个部分的关键技术 1 4 1 服务器部分 3 服务器端主要完成通信线路的建立和接收用户端传来的信息 服务器程序通常 都与数据库相结合 用户端只有向服务器发送连接请求 得到服务器段允许才可以 建立连接 等待客户连接请求 客户连接 会话产生 完成会话 关闭连接 服 务器通过上述程序 实现数据传输 其中关键问题主要集中在以下几个方面 编码 压缩及传输技术 存储和 I O 调度策略 流量控制与差错控制 接入控制 IP 网 的实现 服务器客户端模型如图 图 1 2 图 1 2 客户端 服务器模型 1 4 2 客户端部分 客户端主要工作是使用 Socket 对网络上某一个服务器的某一个端口发出连 接请求 一旦连接成功 打开会话 会话完成后 关闭Socket 客户端不需 要指定打开的端口 通常临时的 动态的分配一个1024 以上的端口 2 它的 核心部分主要有 应答区 对话区等 不同协作类型的系统对这 2 个部分的侧重点 可能不同 开发过程中涉及 TCP IP 协议技术 MFC 网络编程技术等 1 5 设计工作的概要介绍 本设计的研发过程是严格按照软件工程开发流程进行的 主要工作包括项目的 需求分析 结构规划 通信模块的设计 类结构及类图的制定 在这个过程中主要 利用计算机通信协议原理 在 WINDOS 平台下开发通信软件 主要包括套接字编程 以及通信程序设计实现技术 4 第二章 相关开发技术的原理性说明 2 1 MFC 简介 MFC 是在 1992 年随微软的 Microsoft C C 7 0 编译器发布的 是建立在 Windows API 之上的 C 类库 C Class Library 意图是使 Windows 程序设 计过程更有效率 更符合面向对象的精神 现在 MFC 已经成为了 Windows 环境上标 准的 C API MFC 使得开发 Windows 应用程序变得简单容易 将很多应用程序开发中常用的 功能自动化 并且提供了文档框架视图结构和活动文档这样的便于自定义的应用程 序框架 同时 在 Visual C 内部也内建了很多对 MFC 的非常实用的东西 例如 类向导这样的支持 减少软件开发的时间 使用类向导可以生成从 hello world 这 样的简单程序到活动文档服务器这样的复杂程序 MFC 的消息映射机制也避免了使 用性能较低的庞大虚函数表 MFC 在整个 Windows 家族中都是兼容的 2 2 MFC 与 C 语言 API 的关系 设置 Microsoft 基本类库与其它 Windows 类库所不同的唯一特征就是它与 C 语言编写的 Windows API 的紧密的映射关系 而且 可以将直接调用 Windows API 与调用类库自由地混合起来使用 这种直接访问并不意味着类可以完全取代 API 开发者有时必须直接调用一些 Windows 函数 例如 SetCursor 和 GetSystemMetrics 只有在有明显优势时 一个 Windows 函数才被一个类成员函 数所替代 2 3 TCP IP 协议 5 2 3 1 TCP IP 协议参考模型的层次结构 TCP 协议是一个面向连接的 可靠的协议 它将一台主机发出的字节流无差错 地发往互联网上的其他主机 在发送端 它负责把上层传送下来的字节流分成报文 段并传递给下层 在接收端 它负责把收到的报文进行重组后递交给上层 此外 TCP 协议还需要完成流量控制功能 协调收发双方的发送与接收速度 以达到正确 传输的目的 TCP IP 参考模型分为四个层次 应用层 传输层 网络互连层和网 络接口层 如表 2 1所示 表 2 1 TCP IP 参考模型的层次结构 成员变量 描述 应用层 MAIL TELNET FTP SMTP HTTP WWW SNMP TFTP 传输层 TCP UDP 网络互连层 ICMP IP ARP RARP 网络接口层 HDLC PPP FPAME RELAY EIA TIA 232 449 V 35 V 21 TCP IP 协议中的核心部分是传输层协议 TCP UDP 网络层协议 IP 和 网络接口层 这 3 层通常是在操作系统内核中实现 因此用户一般不涉及 在具体 编程时 将提供以下两种形式的编程界面 由内核心直接提供的系统调用或使用以 库函数方式提供的各种函数 前者为内核实现 后者为核外实现 用户服务要通过 核外的应用程序才能实现 也就是使用套接字 7 图 2 1中展示了 TCP IP 协议核心 与应用程序的一般关系 6 图 2 1 TCP IP 协议核心与应用程序的关系 在 TCP IP 参考模型中 去掉了 OSI 参考模型中的会话层和表示层 这两层的 功能被合并到应用层实现 同时将 OSI 参考模型中的数据链路层和物理层合并为 网络接口层 下面 分别介绍各层的主要功能 1 网络接口层 网络接口层实际上并不是因特网协议组中的一部分 但是它是数据包从一个设 备的网络层传输到另外一个设备的网络层的方法 这个过程能够在网卡的软件驱动 程序中控制 也可以在韧体或者专用芯片中控制 这将完成如添加报头准备发送 通过物理媒介实际发送这样一些数据链路功能 另一端 链路层将完成数据帧接收 去除报头并且将接收到的包传到网络层 2 网络互连层 网络互连层是整个 TCP IP 协议栈的核心 它的功能是把分组发往目标网络或 主机 同时 为了尽快地发送分组 可能需要沿不同的路径同时进行分组传递 因 此 分组到达的顺序和发送的顺序可能不同 这就需要上层必须对分组进行排序 网络互连层定义了分组格式和协议 即 IP 协议 Internet Protocol 网络互连 层除了需要完成路由的功能外 也可以完成将不同类型的网络 异构网 互连的任 务 除此之外 网络互连层还需要完成拥塞控制的功能 3 传输层 在 TCP IP 模型中 传输层的功能是使源端主机和目标端主机上的对等实体可 以进行会话 在传输层定义了两种服务质量不同的协议 即 传输控制协议 TCP transmission control protocol 和用户数据报协议 UDP user datagram protocol 4 应用层 7 TCP IP 模型将 OSI 参考模型中的会话层和表示层的功能合并到应用层实现 应用层面向不同的网络应用引入了不同的应用层协议 其中 有基于 TCP 协议的 如文件传输协议 File Transfer Protocol FTP 虚拟终端协议 TELNET 超 文本链接协议 Hyper Text Transfer Protocol HTTP 也有基于 UDP 协议的 开发通信系统时 关心的主要是网络层的 IP 协议和运输层的 TCP 和 UDP 协议 是 一种不可靠的无连接协议 主要用于不要求分组顺序到达的传输中 分组传输顺序 检查与排序由应用层完成 2 3 2 TCP IP 协议的通信方式 TCP IP 协议是 Internet 上广泛使用的一种协议 可用于异种机之间的互联 在网络编程中 程序员只需要利用协议的网络编程接口 Socket9 也称套接字 即 可 在 Windows 中 网络编程接口是 Windows Socket 它包含标准的 Berkley Socket 的功能调用集合 以及为 Windows 所做的一些扩展 TCP IP 协议的应用一 般采用客户 服务器模式 面向连接的应用调用如图 2 2所示 图 2 2 面向连接的套接字调用 8 2 4 Socket 简介 2 4 1WINDOWS SOCKETS 简介 Windows Sockets 用于 Microsoft Windows 环境下的网络计算的开放接口 Windows Sockets 规范为 Microsoft 定义了一个二进制兼容网络编程接口 基于 Berkeley Software Distribution 中的 UNIX 套接字实现 通过使用 Windows Sockets 应用程序能够在任何符合 Windows Sockets API 的网络上通信 许多网络软件供应商支持网络协议下的 Windows Sockets 这些协议包括 传 输控制协议 网际协议 TCP IP 和 Novell Corporation 的互联网包交换协议 顺 序分组报文交换协议 IPX SPX 等 虽然目前的 Windows Sockets 规范定义了 TCP IP 的套接字抽象化 但任何网络协议都可以通过提供自己版本的 实现 Windows Sockets 的动态链接库 DLL 来满足 Windows Sockets 因为套接字使用 网际协议组 所以它们对于支持 信息高速公路 上 Internet 通信的应用程序是 首选方式 套接字是一个通信终结点 它是 Windows Sockets 应用程序用来在网络上发 送或接收数据包的对象 套接字具有类型 与正在运行的进程相关联 并且可以有 名称 目前 套接字一般只与使用网际协议组的同一 通信域 中的其他套接字交 换数据 2 4 2 相关 MFC 类 MFC 为使用 Windows Sockets 编写网络通信程序提供了两种模型 内嵌在两个 MFC 类中 CAsyncSocket 该类封装 Windows Sockets API CAsyncSocket 是为那 些了解网络编程并希望能够灵活地对套接字 API 直接编程 同时还希望方便地使 用回调函数以进行网络事件通知的程序员提供的 除了将套接字打包为面向对象的 形式以用于 C 外 此类提供的唯一附加抽象化是将某些与套接字相关的 Windows 消息转换为回调 CSocket 从 CAsyncSocket 派生出的高水平抽象概念 它通过 MFC CArchive 对 象提供与套接字一起使用的更高级的抽象化 使用带存档的套接字与使用 MFC 的 文件序列化协议非常相似 这使它比 CAsyncSocket 模型更易于使用 它是同步运 行的 9 2 4 3 Socket 的类型 TCP IP 协议使用的套接字分为三类 它们是 流式套接字 SOCK STREAM 数 据报套接字 SOCK DGREAM 和原始套接字 SOCK RAW 9 1 流式套接字 SOCK STREAM 流式套接字向应用 提供了一个面向连接 可靠的数据传输服务 数据无差错 无重复的发送且按发送顺序接收 内设流量控制 避免数据流超限 数据被看作是 字节流 无长度限制 FTP 协议即采用流式套接字 流式套接字最典型的应用是 BBS 和 HTTP 服务 以 BBS 应用为例 用户通过 TELNET 协议和服务器建立连接 在浏览论坛帖子的交互过程中 数据总是顺序地 在源端和目的端之间传输的 流式套接字的通信能力是由 TCP 协议保证的 并建立 在 IP 协议上 2 数据报套接字 SOCK DGRAM 提供了一个无连接服务 数据包以独立包形式被发送 不提供无错保证 数据 可能丢失或重复 并且接收顺序无序 网络文件系统 NFS 使用数据报式套接字 数据以报文的形式发送 且不能保证数据的无差错和顺序到达 使用数据报套接 字的例子包括 DNS Domain Name Service 域名服务 和 NFS 网络文件系统 等 数据报套接字的一个显著优点在于它的开销小 适合于网络广播和组播等需要 一对多发送数据的场合和频繁交互的应用 如 DNS 数据报套接字依赖 UDP 协议提 供服务 这是它具有上述属性的原因 进程要正常工作 而数据报套接字不能保证传输的正确性 因此应用程序必须 内建有差错消除机制 广泛采用的策略是发送端确定一个等待时间 如果在等待时 间内没有接受接收端的确定报文 就接着发送欲发送的报文 直到接受接收端的确 认为止 3 原始套接字 SOCK RAW 应用程序中一般极少使用原始套接字 它功能强大 但操作比较复杂 它可 以访问底层的协议 如 IP ICMP 一般用于协议的开发 常用 DOS 程序 ping 可 以用原始套接字实现 常用于检验新的协议实现或访问现有服务中配置的新设备 2 4 4socket 函数 SOCKET socket int af int type int protocol 应用程序调用 socket 函数来创建一个能够进行网络通信的套接字 10 第一个参数指定应用程序使用的通信协议的协议族 对于TCP IP 协议族 该参数置 AF INET 第二个参数指定要创建的套接字类型 流套接字类型为SOCK STREAM 数据报套接字类型为 SOCK DGRAM 第三个参数指定应用程序所使用的通信协议 该函数如果调用成功就返回新创建的套接字的描述符 如果失败就返回 INVALID SOCKET 套接字描述符是一个整数类型的值 每个进程的进程空间里 都有一个套接字描述符表 该表中存放着套接字描述符和套接字数据结构的对 应关系 该表中有一个字段存放新创建的套接字的描述符 另一个字段存放套 接字数据结构的地址 因此根据套接字描述符就可以找到其对应的套接字数据 结构 每个进程在自己的进程空间里都有一个套接字描述符表但是套接字数据 结构都是在操作系统的内核缓冲里 2 4 5 阻塞和非阻塞 Socket 调用有两种基本模式 阻塞模式和非阻塞模式 所谓阻塞模式 就是 说进程调用某一 Socket 函数后由于某种原因不能马上完成 这时调用进程就一直 等待 直到函数返回为止 与此相应的非阻塞模式在调用 Socket 函数后马上返回 等待调用完成时系统自动会以消息的方式通知调用进程 绝大部分 Berkeley Socket 调用都是阻塞调用 由于 UNIX 是抢先式多任务操作系统 在进程阻塞时 系统会将 CPU 的使用权交给等待的其他进程 这样不会阻塞其他进程的执行 而 Windows 操作系统是非抢先式的 进程不会主动放弃对 CPU 的控制权 因此一个等 待阻塞调用返回的进程会阻塞整个系统 Windows Socket 规范根据 Windows 平台 的具体特点 在 BSD Socket 基础上扩充了非阻塞的 Socket 调用模式 使 Socket 编程更加符合 Windows 系统消息驱动的特性 2 5 多线程技术 2 5 1 进程及线程概述 进程和线程都是操作系统的概念 每个进程是由一个或多个线程 私有的虚 拟地址空间 代码 数据和其它各种系统资源组成 进程在运行过程中创建的资源 随着进程的终止而被销毁 所使用的系统资源在进程终止时被释放或关闭 进程是 11 应用程序的执行实例 线程是进程内的执行路径 也是 Win32安排的最小执行单元 线程包括堆栈 CPU 寄存器的状态和系统计划程序执行列表中的项 每一个进程至 少有一个主执行线程 它无需由用户去主动创建 是由系统自动创建的 此线程终 止时 进程也终止 用户可以根据需要在应用程序中创建其它线程 多个线程并发 地运行于同一个进程中 所有线程都在该进程的虚拟地址空间中 共同使用这些虚 拟地址空间 全局变量和系统资源 但是必须使用信号灯或其他进程间的通信方法 协调它们的工作 一般情况下进程中的每个线程都独立运行的 对进程中的其他线程一无所知 除非使这些线程相互可见 多线程可以实现并行处理 避免了某项任务长时间占用 CPU 时间 要说明的一点是 目前大多数的计算机都是单处理器 CPU 的 为了 运行所有这些线程 操作系统为每个独立线程安排一些 CPU 时间 操作系统以轮换 方式向线程提供时间片 这就给人一种假象 好象这些线程都在同时运行 由此可 见 如果两个非常活跃的线程为了抢夺对 CPU 的控制权 在线程切换时会消耗很多 的 CPU 资源 反而会降低系统的性能 这一点在多线程编程时应该注意 2 5 2 MFC 对多线程编程的支持 Win32 SDK 函数支持进行多线程的程序设计 并提供了操作系统原理中的各种 同步 互斥和临界区等操作 Visual C 6 0中 使用 MFC 类库也实现了多线程的 程序设计 使得多线程编程更加方便 CWinThread 对象代表在一个应用程序内运行的线程 运行的主线程通常由 CWinApp 的派生类提供 CWinApp 由 CWinThread 派生 另外 CWinThread 对象允 许一给定的应用程序拥有多个线程 CWinThread 支持两种线程类型 工作者线程 和用户界面线程 工作者线程没有收发消息的功能 例如 在电子表格应用程序中 进行后台计算的线程 用户界面线程具有收发消息的功能 并处理从系统收到的消 息 CWinApp 及其派生类是用户界面线程的例子 其它用户界面线程也可由 CWinThread 直接派生 CWinThread 类的对象存在于线程的生存期 如果你希望改 变这个特性 将 m bAutoDelete 设为 FALSE 要使你的代码和 MFC 是完全线程安全 的 CWinThread 类是完全必要的 框架使用的用来维护与线程相关的信息的线程 局部数据由 CWinThread 对象管理 由于依赖 CWinThread 来处理线程局部数据 任 何使用 MFC 的线程必须由 MFC 创建 例如 由运行时函数 beginthreadex 创建的线程不能使用任何 MFC API 为了 创建一个线程 调用 AfxBeginThread 函数 根据你需要工作者线程还是用户界面 线程 有两种调用 AfxBeginThread 的格式 如果你需要用户界面线程 则将指向 你的 CWinThread 派生类的 CRuntimeClass 的指针传递给 AfxBeginThread 如果你 12 需要创建工作者线程 则将指向控制函数的指针和控制函数的参数传递给 AfxBeginThread 对于工作者线程和用户界面线程 你可以指定可选的参数来修改 优先级 堆栈大小 创建标志和安全属性 AfxBeginThread 线程将返回指向新 的 CWinThread 对象的指针 与调用 AfxBeginThread 相反 你可以构造一个 CWinThread 派生类的对象 然后调用 CreateThread 如果你需要在连续创建和终 止线程的执行之间重复使用 CWinThread 对象 这种两步构造方法非常有用 创建 线程也可以使用 API 函数 CreateThread 函数完成 本程序使用的就是此函数 其它还有挂起线程 结束线程等函数 在本程序中没有涉及到 将不再一一详解 第三章 总体规划与设计方案 3 1 需求分析 3 1 1 功能需求 13 1 本软件是一个简单的即时通信软件 完成后能进行简单的文本传输 软件 分为两部分 server 和 client 即服务器端和客户端 客户端能相互进行文本传 输 2 服务器端能实现启动和终止服务 具有主动权 3 服务器端能接受并验证客户端连接 4 服务器端能动态管理在线用户名单 为新登录用户提供本服务器在线人员 名单 将在线人员变动信息 用户上线 下线 及时传给当前再线用户 3 1 2 环境需求 支持 WIN2000 XP VISTA 7 操作系统 C200 32M 内存以上可以正常运行 其他无特殊要求 3 1 3 性能需求 1 可靠性高 能在由于系统问题或其它原因产生错误后 作出相对应处理 比如网络初始化失败 服务器不在线等 可以提示用户安全退出本程序 在出现不 可知的错误以后 可以尽量安全的退出程序 在程序的设计过程中 要求能尽可能 多的设想到用户使用过程中可能发生的事件 并能在判断事件后做出相应的处理 使程序具有较高的容错性能 2 宜操作性 程序简单易懂 容易上手使用 设计界面是 简化界面的复 杂性 模拟 QQ 等现有即时通讯工具的界面 使用户能很容易看懂并使用 3 开发文档易理解 保证以后自己二次开发或他人接手开发时 能够清晰 的理解整个系统的设计思路和实现细节 4 模块化设计此软件的功能 不同的模块实现不同的功能 使得软件易于 以后的维护与扩展 在以后可以更好的完善本软件的功能 更方便于在工作中的应 用 3 1 4 界面需求 14 界面友好 聊天对话框线程支持 实现无限制数量用户聊天 服务器端无特殊要求 3 1 5 用户需求 现在社会是信息化的社会 什么都追求着快 新 好 在这种快节奏的生 活方式中 人们之间的通讯联系就显得非常的重要了 商业之间的合作 人们 之间的友谊交往 甚至热门谈到的网上恋爱等等都需要通讯联系 而过去的鸿 雁传书已经是满足不了现代人的欲望了 既然这网络这么的流行 过去的联系 方式又这么的落后 因此人们的目光就转向了网络通讯 聊天工具就是一种网 上很普遍但是又很重要的通讯方式 3 2 方案的选择以及模块设计 3 2 1 系统整体结构 为实现网络聊天的功能 采用 Windows Socket 编程 服务器与客户端采用了 TCP IP 连接方式 在设计聊天方案时 实行将所有信息发往服务器端 再由服务 器进行分别处理的思路 服务器端是所有信息的中心 如图3 1 客户端 Intern et 客户端 服务器端 图 3 1 整体结构图 15 系统功能可划分为以下模块 图3 2 系统功能说明 用户上线 用户上线功能分为两部分 第一 开启系统的时候 使用系统的用户就要收到这个人的信息 知道他已 经上线 第二 系统在运行之中 它会不断地进行心跳告诉其他人 这个功能是为了 防止在系统启动的时候发出的用户信息没有被其他的使用本地系统的人收到 使用 心跳功能后 用户的信息会不断地通知在线的人 这样有利于系统的稳定 这个功 能要采用网络广播来实现 用户下线 当用户退出本系统时 系统会自动发出下线的信息 凡是正在使用本系统的 人都会得到通知 得到这个通知后 每个在线的人都会看到这个用户的信息从自己 的列表中删除 1 客户端可以自由登录 login 登出 logout 指定的服务器 2 客户端可以根据服务器上的在线人员变动信息 用户上线 下线 修改本 机保存的在线人员名单 3 客户端可以和其他用户的即时通信 发送和接受文本信息 16 3 2 2 系统的信息传递过程 图3 3 系统信息传递过程 图3 3所示 在客户端启动后 客户端计算得到本地网络的广播地址 进行广播 查找服务器端 服务器接收到客户端的广播信息后返回服务器地址 则客户端接收 验证信息并记录服务器端地址 然后客户端启动定时期 定时发送信息到服务器 以告知服务器自己在线 然后服务器返回在线用户列表 服务器依靠客户端发送的 信息来更新维护在线用户列表 在客户端与服务器尽心数据交换 拥有了在线用户 列表后 就可以进行客户之间的信息交流了 如果服务器不在线 则客户端会提示 用户退出 3 2 3 系统初始化 17 图 3 4 系统初始化 3 2 4 用户上下线动态管理 服务器端能动态管理在线用户名单 为新登录用户提供本服务器在线人员名单 将在线人员变动信息 用户上线 下线 及时传给当前在线用户 用用例图图 3 5 表示 18 图 3 5 用户上下线 用户上线 活动图图 3 6表示 图 3 6 用户上线 19 3 2 5 程序中主要变量及类的功能说明 sockaddr in clientaddr Serveraddr 暂时存放客户端 IP 地址 A SOCKET serverSocket SclientSocket 255 ClientSocket 套接字 int Iflag start okflag Cokflag 255 count sdflag changename 0表示服务 器 1为客户端 start 0表示没点开始 char cname 255 12 用户名 okflag 0表示没有取得身份认证对于客户端 Cokflag 数组表示对客户端群的 LoginDialog 软件登录 CMy111Dlg 软件主体的类 OnInitDialog 初始化 20 第四章 详细设计 4 1 登录设计 4 1 1 登录框界面设计 为简化操作 本软件的登陆界面设计如图4 1 图 4 1 登陆界面 本软件的登陆界面为简化操作 省去了用户的密码和账号验证 算然安全性有所 降低 但界面清爽节约大方 控件 ID 如下 IDC BTN Login 登录 IDC BTN Exit 退出 4 1 2 登录功能的实现 在函数 BOOL CMy111App InitInstance 中添加 LoginDialog dlg1 if dlg1 DoModal IDOK 在启动主界面聊天前 先加载登陆页面 函数 void LoginDialog OnBTNLogin 和函数 void LoginDialog OnBTNExit 21 分别完成登录和退出的实现 同时将登录和退出按钮与两个函数建立连接 SetDialogBkColor RGB 188 197 230 RGB 13 125 188 完成背景颜色的修改 4 2 聊天设计 4 2 1 聊天界面的设计 图 4 2 主聊天界面 本软件是服务器和客户端设计在一起 实际应用的时候由用户自行选择 主要控件 ID 如下 IDC RADIO2 服务端 IDC RADIO1 客户端 IDC BUTTON1 链接服务器 IDC BUTTON2 发送消息 IDC BUTTON3 清空记录 IDC BUTTON4 踢掉用户 IDC EDIT5 用户名输入 IDC EDIT1 服务器 ID 输入 22 实际作为服务器工作时 图4 3 服务器工作 它显示在线用户的列表 保留踢出用户的权利 显示当前连接的数目 实际作为客户端工作时 图4 4 客户端工作 23 它显示当前用户数目 但踢出功能不可用 有音效选择和更改昵称的权利 4 2 2 聊天功能的实现 对话框初始化 在功能函数 BOOL CMy111Dlg OnInitDialog 下设置对话框显示 进行初始化操 作 GetDlgItem IDC BUTTON2 EnableWindow FALSE GetDlgItem IDC BUTTON4 EnableWindow FALSE 按钮的使能操作 网络初始化 BOOL CMy111Dlg InitNetwork int Iflag 初始化网络 char safecode 15 himulakenshin 安全识别代码 简单识别 if Iflag 0 初始化 TCP 协议 服务器初始化 serverSocket socket AF INET SOCK STREAM IPPROTO TCP 创建服务器端套接字 sockaddr in localaddr 以下为绑定到本地一个端口上 localaddr sin family AF INET IP localaddr sin port htons 8250 端口号 8250 localaddr sin addr s addr 0 注册网络异步事件 m hWnd 为应用程序的主对话框或主窗口的句柄 WSAAsyncSelect serverSocket m hWnd NETWORK EVENT FD ACCEPT FD CLOSE FD READ FD WRITE 客户端初始化 ClientSocket socket AF INET SOCK STREAM IPPROTO TCP 创建客户端端套接字 struct sockaddr in daddr 以下为绑定到本地一个端口上 memset void daddr sin family AF INET daddr sin port htons 8250 端口号 8250 定义网络事件的响应函数 24 void CMy111Dlg OnNetEvent WPARAM wParam LPARAM lParam int iEvent WSAGETSELECTEVENT lParam 调用 API 函数 得到网络事件类型 SOCKET pSock SOCKET wParam 得到发出此事件的客户端套接字 FD ACCEPT 客户端连接请求 FD CLOSE 客户端断开事件 FD READ 网络数据包到达事件 FD WRITE 发送网络数据事件 使用 OnNetEvent WPARAM wParam LPARAM lParam 函数将通过 lParam 参数发 送过来的信息顺序放在控件 IDC EDIT3 显示聊天信息 中 即 GetDlgItem IDC EDIT3 SendMessage WM VSCROLL SB BOTTOM 0 中显示 接收通过 wParam 参数传送过来在线用户链表信息 更新自身维护的在线用户信息 链表 并在控件上显示出来 工作方式的选择 函数 void CMy111Dlg OnRadio1 和 void CMy111Dlg OnRadio2 中 当 Iflag 0 为服务器方式 当 Iflag 1 为客户端方式 其实现都是对几个控件的 使能控制完成的 如 Iflag 0 GetDlgItem IDC EDIT1 EnableWindow FALSE GetDlgItem IDC STATIC1 EnableWindow TRUE GetDlgItem IDC COMBO1 EnableWindow TRUE GetDlgItem IDC BUTTON4 EnableWindow TRUE GetDlgItem IDC BUTTON1 SetWindowText 开始监听 主机 IP 的获取 void CMy111Dlg GetHostIp wVersionRequested MAKEWORD 2 0 if WSAStartup wVersionRequested WSACleanup 发送数据 void CMy111Dlg OnButton2 UpdateData 把界面控件上的值赋值给成员变量 if m c1 GetLength 0 防止字符串数组溢出 25 send ClientSocket cha sizeof cha 0 GetDlgItem IDC EDIT3 SendMessage WM VSCROLL SB BOTTOM 0 建立消息映射 接收数据 void CMy111Dlg OnReceive SOCKET sock if Iflag 0 服务器方式工作 做循环 如果接受到消息 循环读取 if cha1 0 1 加入服务器时间 即当用户间通信时 发送 的信息中会显示发出的时间 send SclientSocket num ctemp sizeof ctemp 0 通告有多少用户当前在线 清空记录 void CMy111Dlg OnButton3 UpdateData 把界面控件上的值赋值给成员变量 m c2 T 使成员变量为空值 UpdateData FALSE 把成员变量的值在界面上更新 以上三步完成清空数据的功能 断开连接 函数 void CMy111Dlg Onclose SOCKET sock 完成客户端的主动断开连接服务 并告知其他用户他以下线和还有多少用户在线 同时配以音乐提示 而函数 void CMy111Dlg OnButton4 是服务器的权利 他可以主动断开该用户 与服务器的 socket 连接 迫使其下线 背景图片的改变 void CMy111Dlg OnPaint bmpBackground LoadBitmap IDB BITMAP10 IDB BITMAP9 是你自己的图对应的 ID dc StretchBlt 0 0 rect Width rect Height 调用 26 第五章 测试 5 1 黑盒测试 将软件装在计算机上 分别运行两个客户端和一个服务器端 使用软件的一 个客户端向另一个客户端发送消息 第一个客户端可以正常发送消息并可以正常的 在本地软件相应位置显示 对应的接收端可以接收到正常的信息并显示 查看服务 器端维护的在线用户信息正常 客户端接收到的在线用户列表信息与服务器端相同 在有一个客户端下线或上线时 可以在一定的时间内得到更新 说明服务器端可以 正常维护在线用户列表 并将在线用户列表正常的发送到客户端 总体来说聊天信 息发送功能与在线用户列表维护功能正常 能实现前期需求分析时需求的功能 在使用后可以得出的结论为 客户端与服务器端的信息交流 客户端之间信息 发送与接收 在线用户列表的维护三项基本功能运行正常 5 2 白盒测试 利用 VC 的调试功能 在代码中插入断点进行单步跟踪 启动一个客户端 在服务器端的程序中 选择关键位置插入断点 在程序运行到此处时停止检查相应 数据的完整性与正确性 此过程中需要检测的为服务器维护在线用户列表的检测与 发送数据的正确性 检测中可以发现 服务器端可以正常运行 且程序没有出现异 常 启动服务器端 然后在客户端的程序中插入断点 检测客户端发送消息功能与 接收显示维护在线用户列表的功能 在相应的断点处的数据与程序运行都正常 没 有异常现象发生 在测试过程中 各个模块的功能皆可进行正常运行 数据也未发生异常现象 27 结束语 我在做本次毕业设计之前基本上还没接触过网络编程 对知识的理解也全都停 留在理论层面 因为很多东西都掌握的不是太牢固 做的结果不算特别好 与自己 原来的设想有些差距 如 登录时没有密码验证 服务器没有使用数据库 不能 查看聊天记录和用户附带信息 虽然做的不好 但也学到了很多知识 对网络编 程有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46633-2025土方机械挖掘机运行能效评价方法
- 2025年衡阳辅警招聘考试题库及答案详解(各地真题)
- 2025年甘孜藏族自治州辅警招聘考试真题附答案详解(轻巧夺冠)
- 2025年漳州辅警招聘考试真题及答案详解(有一套)
- 2025年苗栗县辅警招聘考试题库附答案详解(b卷)
- 2025年白银辅警招聘考试题库有答案详解
- 2025年韶关辅警招聘考试题库附答案详解(轻巧夺冠)
- 2025年苗栗县辅警招聘考试题库含答案详解(考试直接用)
- 2025年衡阳辅警协警招聘考试备考题库(含答案详解)
- 2025年海西州辅警协警招聘考试备考题库及答案详解(有一套)
- 儿科麻醉管理
- 2025至2030中国PEEK牙科植入物行业项目调研及市场前景预测评估报告
- 幼儿园社会性发展教育方案
- 2026海南省发展控股有限公司校园招聘笔试考试参考试题及答案解析
- 旧楼加装电梯的详细施工方案
- GB/T 46433.1-2025生物技术基因组编辑第1部分:术语
- 托育机构消防安全培训
- 深圳智慧环卫设计方案
- 2025年铆工安全考试题及答案
- 2025年三聚氰胺行业分析报告及未来发展趋势预测
- 国家安全教育(中国人民公安大学)学习通网课章节测试答案
评论
0/150
提交评论