基于VC的聊天系统毕业论文.doc_第1页
基于VC的聊天系统毕业论文.doc_第2页
基于VC的聊天系统毕业论文.doc_第3页
基于VC的聊天系统毕业论文.doc_第4页
基于VC的聊天系统毕业论文.doc_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

哈尔滨商业大学毕业设计 论文 哈尔滨商业大学毕业设计 论文 基于 VC 的小型聊天系统 学 生 姓 名 刘加庆 指 导 教 师 葛 利 专 业 计算机与科学与技术 学 院 计算机与信息工程学院 2012 年 06 月 01 日 Graduation Project Thesis Harbin University of Commerce Small Chat System based on VC Student Liu Jiaqing Supervisor Ge Li SpecialtyComputer science and technology SchoolComputer and Information Engineering 2012 06 01 毕毕业业设设计计 论论文文 任任务务书书 姓名 刘加庆学院 计算机与信息工程学院 班级 中外二班专业 计算机科学与技术 毕业设计 论文 题目 基于 vc 的小型聊天系统的设计与实现 立题目的和意义 目的 随着全球信息化的不断发展 网络也在飞速发展 聊天系统已经成为了一种不可缺 少的网络交流方式 出于高效 快速地处理各种事务的目的 开发了这款小型聊天系统软件 意义 在聊天系统的帮助下 企业得以简化信息流程 提高信息交换的速度 从而提高工 作效率 个人也能够提高信息的交互效率 技术要求与工作计划 技术要求 1 广泛阅读与选题有关的文献 30 篇以上 其中 英文文献至少 5 篇 结合毕业实习充分 掌握一手资料 在论文撰写中运用恰当 贴切 2 运用所学的专业基础理论和专业知识 理论联系实际 分析和解决本课题研究问题 3 在论文撰写过程中 论证要逻辑严密 概念准确 数据可靠 结论正确 符合毕业论 文写作规范的各项要求 工作计划 1 按照确定的选题范围查阅有关小型聊天系统的相关文献 2 根据查阅的有关小型聊天系统相关文献 撰写论文大纲和开题报告 并按指导教师要 求修改 3 结合毕业实习 了解现有聊天系统存在的意义 4 按照开题通过的论文大纲和所收集的一手和二手资料撰写论文初稿 5 根据指导教师提出的修改意见修改论文初稿 6 按学校毕业论文撰写规范的要求排版 打印和装订 7 准备毕业论文答辩陈述词 8 毕业论文答辩 时间安排 第 1 周 第 3 周 查阅相关文献资料 明确研究内容 学习开发所需 vc 相关知识 数据 库等相关技术 确定方案 完成开题报告 第 4 周 第 5 周 对开发系统进行需求分析等开发的前期工作 第 5 周 第 12 周 进行开发工具的选择与配置 准备开发环境 具体代码的编写 第 13 周 第 14 周 完成修改毕业论文 第 15 周 准备论文答辩 指导教师要求 签字 年 月 日 教研室主任意见 签字 年 月 日 院长意见 签字 年 月 日 毕毕业业设设计计 论论文文 审审阅阅评评语语 一 指导教师评语 指导教师签字 年 月 日 毕毕业业设设计计 论论文文 审审阅阅评评语语 二 评阅人评语 评阅人签字 年 月 日 毕毕业业设设计计 论论文文 答答辩辩评评语语 三 答辩委员会评语 四 毕业设计 论文 成绩 专业答辩组负责人签字 年 月 日 五 答辩委员会主任签章 答辩委员会主任单位 签章 答辩委员会主任职称 答辩委员会主任签字 年 月 日 摘 要 随着电脑技术和 Internet 的快速发展 网上聊天已成为人们日常交流中的一种重要的 方式 与 E mail 电话相比 网上聊天服务更具有时效性和简洁性 本项目采用软件工程 的方法 综合运用程序设计技术 网络技术 以 Visual C 6 0 作为系统前台应用程序开 发工具 开发设计了在 TCP IP 协议下的聊天系统 此聊天系统采用客户端 服务器 C S 模式和 TCP 连接 它有两个模块组成 服务 器和客户端 服务器模块主要用来维护网络上所有用户的信息 如用户名 聊天客户端 模块主要包括用户登录 发送信息 接收信息等 整个工程采用结构化的方式进行编译 逐步完善系统功能 系统采用 CSocket 实现连网功能 CSocket 是 MFC 在 CAsyncSocket 基础上派生的一 个同步阻塞 Socket 的封装类 而 Socket 是 Windows 中得到广泛应用的 开放的 支持多 协议的网络编程接口 关键词 聊天系统 VC TCP IP Abstract 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 The subject under discussion adopts the method of the software project use procedure designing technique and the network technology The project use Visual C 6 0 as the development tools studies under the TCP IP protocol of chat rooms This chat tool adopts client server mechanism C S and TCP It is composed of two components the server and the client The server model is mainly used to prootect all users information incuuding user s name and so on The client model includes user regediting sending message receiving message and so on System uses CSocket to achieve networking CSocket is a synchronous blocking Socket wrappers derived by MFC based on CAsynncSocket The Socket is widely used for open multi protocol network programming interface in windows Key Words Chat System VC TCP 目 录 摘 要 I ABSTRACT II 1 绪 论 1 1 1 论文的目的和意义 1 1 2 论文的主要内容 2 1 3 国内外聊天系统的现状 2 1 4 开发环境及编程语言介绍 4 1 4 1 Visual C 可视化集成开发环境 4 1 4 2 网络编程 5 1 5 需求分析及可行性研究 6 1 5 1 时间要求 6 1 5 2 功能要求 6 1 5 3 系统基本流程图 6 1 5 4 性能要求 7 1 5 5 测试环境规定 7 1 5 6 可行性研究 7 2 聊天系统的设计 8 2 1 聊天系统的设计 8 2 1 1 客户机 服务器模式 8 2 2 系统实现原理 8 2 2 1 Win32 编程原理 8 2 2 2 TCP IP 协议简介 11 2 2 3 Windows Socket 网络编程接口概述 11 2 2 4 系统工作流程 19 2 2 5 界面设计 20 3 聊天系统的实现 21 3 1 准备工作 21 3 2 功能实现 25 4 系统软件的测试 28 4 1 软件测试的意义 28 4 2 软件测试的目标 28 4 3 软件测试的方法 28 4 4 软件测试的用例 29 4 5 软件测试分析 30 4 5 1 静态分析 30 4 5 2 动态测试 30 4 5 3 软件测试过程 31 4 6 软件可靠性测试 32 4 6 1 软件可靠性测试定义 32 4 6 2 软件可靠性测过程 33 4 6 3 软件可靠性度量 34 4 6 4 软件可靠性评估 34 结 论 36 参考文献 37 致 谢 38 精选范本 1 绪 论 当今世界正处于信息时代 计算机和通信网络是这一时代所谓 信息基础设施 人们对网络的依赖越来越多 越来越离不开网络 由此而产生的聊天工具越来越多 例 如 国外的 ICQ 国内腾讯公司开发的 OICQ 基于 VC 网络编程的强大功能 本次毕 业设计使用 VC 编写一个聊天系统 本系统建立在 VC 平台上 系统的设计使用了面向对象技术和面向对象的设计原则 系统采用 C S 结构 客户端与客户端以及客户端与服务器端之间通过 CSocket 传送消息 1 使用 VC 语言编写 开发工具采用 VC6 0 2 1 1 论文的目的和意义 近年来 随着全球信息化的不断发展 网络也在飞速发展 出于高效 快速地处理 各种事务和提高个人信息的交互目的 越来越多的聊天系统得以应用 在聊天系统的帮 助下 企业和个人得以简化信息流程 提高信息交换的速度 从而提高工作和沟通效率 相比以往传统的通信方式 例如 书信 电话等通信的方式 聊天系统的诞生就得以广 泛的应用和推广 聊天系统迅速成为一种不可缺少的通信方式 而且还在以更加强劲地 速度进行发展和拓展 随着用户对软件功能的需求不断提高 即时通讯的产品也不断地更新换代 即时通讯 的发展不论是在基础应用方面还是在扩展应用方面都有着飞跃 为了满足用户的需求 包括腾讯公司的聊天软件 QQ 在内 许多即时性聊天工具都推出了语音聊天 视频聊天功 能模块 本课题研究的是基于 vc 的聊天系统 用 VC 编写的程序 程序实现一般的文 字聊天功能 可作为小型简洁的交流工具 本系统采用基于 Socket 的方法实现通信交流 基于 Socket 的通信软件可以成为提供 一种良好 安全 快速的通信机制 它的实现无需对硬件有更高的要求 具有实现成本 低廉的优点 它的使用能有效地提高交流沟通的速率 提高网络通信的使用效率 可以 很好地解决传统沟通不具有的各种通信需求 基于 Socket 的聊天工具很好地诠释了 Socket 通信的原理 并且在企业内部通信 教 学 讨论等应用中都具有一定的实用价值 它具有信息收发速度快 保密性好 占用网 络带宽资源低 占用服务器吞吐能力低 易于编程实现等优点 3 基于 Socket 的通信软 件应用范围广阔 不但可以处理传统的通信需求 而且也能扩展以适应新型的网络应用 如网络教育 数据影音传输等 拥有广泛的应用前景 如今即时通信工具一般采用 UDP 或者 TCP 协议体系来实现 开发技术已经比较成 熟 UDP 的实时性比较好 但是不一定提供可靠的数据传输 TCP 可以提供可靠的数据 传输 本课题采用 TCP 完成小型聊天系统的设计 精选范本 1 2 论文的主要内容 本课题主要研究的是小型聊天系统 该聊天系统采用客户端 服务器 C S 模式和 TCP 连接 能实现用户在客户端与服务器间传递文字信息 它有两个程序组成 服务器 和客户端 首先需要登录服务器 需要指定服务器地址和端口号 同时设置一个网名 与服务器建立连接 如果所取网名已经被其他已经登录的客户端使用 服务器会告诉客 户端 要求重新登录 登录后 客户端各用户可以发送文字信息 相互聊天 服务器模 块主要用来维护网络上所有用户的信息 如用户名 聊天客户端模块主要包括用户登录 发送信息 接收信息等 整个工程采用结构化的方式进行编译 逐步完善系统功能 研究本课题需要熟练掌握 VC 语言 并且熟悉 VC 平台的操作 利用 socket 编程技 术 TCP 协议进行局域网聊天软件的实际开发 选择 TCP 协议而不选 UDP 是为了保证信 息的可靠性 不同于 UDP 协议 TCP 要求在获得可靠连接后才发送消息 第一章首先主要讨论课题研究的目的和意义 并对主要内容作了简单的介绍 以及 介绍了目前国内外聊天系统的现状 对国内 QQ 和国外 MSN 聊天软件做出了概括性的介 绍并作了一些比较 其次介绍开发平台和网络编程 对 Socket 的历史和发展简单描述 第二章本论文的主体部分讨论了整个聊天系统的设计 介绍了客户端 服务器模型 并讨论了系统的实现原理和界面设计 以及聊天系统的实现过程和对各个功能的实现做 了详细的分析 第三章给出系统软件的调试论述 对设计过程中出现的问题进行分析 概括了在软 件开发进行测试的重要性 并对今后的继续完善做了展望 最后是总结 参考文献和致谢部分 主要表达了在论文的完成过程中遇到的问题 以及得到指导老师和热情的同学得帮助的感谢 1 3 国内外聊天系统的现状 目前国内外做聊天系统的公司很多 产品也琳琅满目 国内有诸如腾讯 QQ 新浪 UC 网易泡泡等 国外有著名的 MSN 新版改名为 Live Messenger 以及跨平台 Gaim 等 本人取最具代表性的 QQ 和 MSN 进行了一些研究 作为开发聊天系统的准备 腾讯无疑是国内即时通讯市场的霸主 自从 99 年进入即时通讯领域并迅速占市场之 后 其在国内用户数量始终高居榜首 即使近几年面对微软 MSN 的强大攻势 腾讯 QQ 的时常占有率依然稳步增长 腾讯的成功与其对 QQ 的不断创新和完善是分不开的 参考了许多网络上的资料 以及自己通过观察腾讯 QQ 运行时的各种细节 可以确定 腾讯 QQ 是以多服务器提供服务 服务器总控客户端 客户端之间 UDP 直连通信的 并 且在两个客户端之间不能建立直连的情况下 才由服务器进行中转通信 精选范本 图 1 1 腾讯 QQ 服务器 客户端模型 与腾讯 QQ 不同 微软的 MSN Messenger 只使用了 TCP 作为传输层通信协议 所有 客户端与服务器进行连接 然后通过与服务器的 TCP 连接进行中转通信 图 1 2 MSN 服务器 客户端模型 腾讯使用的模型中 服务器主要处理客户端各种状态的控制 可以极大减轻服务器 的处理压力 但其内部协议和实现复杂度都较高 而 MSN Messenger 所有数据都要经过 服务器 服务器压力可想而知 难怪平时很少见到使用 MSN 进行语音视频聊天的 上述软件都实现了广域网上的即时通信 在使用方面各有特色 在实现方面也各有 所长 但是随着企业规模的扩大 业务量的增加 企业内部的信息越来越私密 企业只 精选范本 希望员工通过内部局域网进行沟通与交流 避免企业内部机密通过 Internet 泄露到外部 所以局域网的聊天工具也占了很大的市场 1 4 开发环境及编程语言介绍 1 4 1 Visual C 可视化集成开发环境 VC6 0 是微软推出的一款可视化编程工具 适用面非常广泛 VC6 0 包含了一个文本 编辑器 资源编辑器 工程编译工具 一个增量连接器 源代码浏览器 集成调试工具 以及一套联机文档 使用 VC6 0 可以完成创建 调试 修改应用程序等的各种操作 VC6 0 采用标准的多窗口 Windows 用户界面 并增加了一些新特性 使得开发环境 更易于使用 用户很容易学会它的使用方法 由于 VC6 0 是一个可视化的开发工具 在介绍 VC6 0 的各个组成部分之前 首先了 解一下可视化编程的概念 可视化技术是当前发展迅速并引人注目的技术之一 它的特 点是把原来抽象的数字 表格 功能逻辑等用直观的图形 图象的形式表现出来 4 可视 化编程是它的重要应用之一 所谓可视化编程 就是指 在软件开发过程中 用直观的 具有一定含义的图标按钮 图形化的对象取代原来手工的抽象的编辑 运行 浏览操作 软件开发过程表现为鼠标点击按钮和拖放图形化的对象以及指定对象的属性 行为的过 程 这种可视化的编程方法易学易用 而且大大提高了工作效率 5 Visual C 所提供的 MFC Microsoft 基本类库 对 Window98 NT 2000 所用的 Win32 API 应用程序接口 进行了彻底的封装 这使得可以使用完全的面向对象的编程方法来进行 Windows 程序的开发 并能够大大缩短程序的开发周期 降低开发成本 把 Windows 程序员 从大量复杂的劳动中解放出来 Visual C 给应用程序的开发人员提供了丰富的功能 Visual C 通过 MFC 库提供了 一个完整的应用程序的骨架 开发人员可以忽略应用程序的入口点和结束地点 并且可 以忽略消息在应用程序的流动顺序 通过 MFC 的支持 Visual C 也提供了 Document View 文档视图 的应用程序的结构 开发人员可以将数据保存在 Document 类的对象上 而在屏幕的显示的数据由 View 类的对象来负责 通过 MFC 的支持 Visual C 也实现了 面向对象领域的 RTTI RunTime Type Information 运行时类型识别 Dynamic Creation 动态创建 Persitence 永久保存机制 同时他也实现了 Windows 下的 Message Mapping 消息映射 和 Command Routing 命令传递 通过 MFC 的 Cdatabase 和 Crecordset 类 Visual C 可以实现数据库的应用 通过 ChtmlStream CHttpFilter CHttpFilterContext ChttpServer 等 ISAPI Internet Server API 可以很好的支持 Internet 上的 http 协议相关的操作 由于 MFC 涉及到应用程序开发的各个 领域 其 Visual C 成为倍受欢迎的开发工具 精选范本 1 4 2 网络编程 80 年代初 美国政府的高级研究工程机构 ARPA 给加利福尼亚大 Berkeley 分校 提供了资金 让他们在 UNIX 操作系统下实现 TCP IP 协议 在这个项目中研究人员为 TCP IP 网络通信开发了一个 API 应用程序接口 这个 API 称为 Socket 接口 套接字 今天 SOCKET 接口是 TCP IP 网络最为通用的 API 也是 INTERNET 上进行应用开发 最为通用的 API 套接字是从英文单词 socket 翻译过来的 Socket 在英文中是插座的意思 在这里设计 者实际上是暗指电话插座 因为在 Socket 环境下编程很像是打电话的模拟 Internet 的 IP 地址就是电话号码 要打电话 首先要有个电话插座 在程序中就是向系统申请一个 Socket 以后两台机器上的程序 交谈 都是通过这个 Socket 来进行的 对程序员来说 也可以把 Socket 看成一个文件指针 只要向指针所指的文件读写数据 就可以实现双向通讯 它是网 络通信的基本构件 套接字是可以被命名和寻址的通信端点 是网络互连终点 换句话说 网络互连是两个计算机或处理器通过网络相互传输数据 网络专业人员将每个网络会话 的末端称做终点 若通过套接字接口进行网络互连 则程序在每个网络互连的末端都需要 一个套接字 套接字接口相当于文件系统 可以使用 API 通过网络软件申请一个可以指定特 定套接字的句柄来定义套接字的特性 当然 套接字句柄和文件句柄是不同的 文件句柄 指向一个特定的文件和设备 而套接字句柄并不代表一个特定的终点或目标地址 基于套 接字的程序先创建一个套接字 然后再将套接字和目标终点连接起来 底层的套接字函数 是 WinInetAPI 的一部分 但使用 MFC 的 CSocket 类 它封装了这些套接字函数 CSocket 类实际上来源于 CAsyncSocket 类 但该类编程比较复杂 需要编写底层函数来进行通信操 作 而 CSocket 为底层函数提供了一个更抽象的封装 替编程者执行对底层函数的操作 简化 了 Socket 编程 CSocket 类提供了一个高级的 Socket 支持 运用了 MFC 的序列化类来提 供和传输 Socket 对象 利用 Socket 进行通讯 有两种主要的方式 一种叫流方式 StreamSocket 也称面向连接方式 在这种方式下 两个通讯的应用程序之间先要建立一种 虚拟的连接 其过程好像客户机在给服务器打电话 只有服务器拿起了听筒 才有可能开始 传输数据 这种方式对应的 TCP 协议 第二种叫作数据报文方式 DatagramSocket 又称无 连接方式 这时两台计算机像是把数据放在一封封信里通过网络寄给对方 信在传送的过 程中有可能会残缺不全 而且 后发出的信也有可能会先收到 它对应的是 UDP 协议 6 流 方式的特点是 通讯可靠 对数据有校验和重发的机制 通常用来作数据文件的传输如 ftp telnet 等 数据报文方式由于取消了重发校验机制 能够达到较高的通讯速率 可以用作 一些对数据可靠性要求不高的通讯 如实时的语音 像转送 播消息等 由于两台计算机 之间采用的是客户机 服务器模式 为保证数据的可靠性 可以采用了基于流方式的套接字编 程 7 精选范本 1 5 需求分析及可行性研究 1 5 1 时间要求 本项目作为大学本科毕业设计题目 从 3 月 8 号接受选题开始 在 5 月 20 号之前完 成系统设计 编码实现工作 在 6 月 01 号之前完成毕业设计论文初稿 6 月 10 号之前最 终完成论文 1 5 2 功能要求 1 用户端之间的信息发送 本程序需要实现的最基本的功能 2 在线用户主机名列表的维护 3 在 C S 模式中 服务器与客户端是相互依赖的 在客户端启用以后 需要查看 服务器端是否在线 服务器在线才能正常使用客户端 如果服务器不在线 则在检测一 定次数以后自动退出客户端程序 在使用过程中 客户端在指定时间内未向服务器端发 送信息的 服务器认为客户端下线 客户端在一定时间内未收到服务器端信息的 认为 服务器已经下线 则提示用户并建议退出 在用户一定时间后没有退出的则自动关闭客 户端程序 1 5 3 系统基本流程图 图 1 3 聊天系统工作流程图 1 5 4 性能要求 首先要求程序要完全可靠 可以应付种种由于系统问题产生的错误 比如初始网络 失败 对方突然下线等 要求提前设想到类似的尽可能多的可能发生的事件 做出相应 的应对措施 并向用户提交简单易懂清晰明白的提示信息 精选范本 程序要有良好的容错性 当用户进行非法操作时或者系统本身出现问题时要能以最 好的方式退出程序 避免发生程序假死现象 开发文档要有好的易理解性 如果系统又要交由别人接手开发 或者自己由于种种 原因需要进行二次开发 那么要保证以后能够清晰的理解整个系统的设计思路以及实现 细节 要求程序对所运行之系统的硬件条件要求尽可能低 运行时内存占用尽可能小 响 应速度要尽可能快 并且不发生内存泄漏之类影响系统运行的错误事件 并且要求易于 维护及扩展 所以应该采用模块化开发 各个模块之间不要有太多的联系 以免维护困 难 1 5 5 测试环境规定 在开发完成以后 自己进行一个全面的测试 1 5 6 可行性研究 1 成本可行性分析 因为本软件只做开发学习使用 所以暂且不考虑经济成本及盈利问题 2 技术可行性分析 首先我已经搭建好开发所需要的软硬件平台 并进行了合理而完善的需求分析 做 好了充分的前期准备工作 其次因为本程序的平台将基于 WINDOWS 将要使用网络通 信技术 而 WINDOWS 有完善成熟的网络通信接口 以及与 VC 开发环境的严密契合能 力 加之相类似的更大规模的 INTERNET 通信工具产品也已有例在先 所以这个程序的 开发可行性在技术上是完全可行的 精选范本 2 聊天系统的设计 2 1 聊天系统的设计 2 1 1 客户机 服务器模式 通信的两个应用程序间相互作用的主要模式是客户机 服务器模式 即客户向服务器发 出服务请求 服务器接收到请求后 提供相应的服务 客户机 服务器模式的建立基于以下两 点 首先 建立网络的起因是网络中软硬件资源 运算能力和信息不均等 需要共享 从而造 就拥有众多资源的主机提供服务 资源较少的客户请求服务这一非对等作用 其次 网间进 程通信完全是异步的 相互通信的进程间既不存在父子关系 又不共享内存缓冲区 因此需要 一种机制为希望通信的进程间建立联系 为二者的数据交换提供同步 8 客户机 服务器模式在操作过程中采取的是主动请求方式 首先服务器方要先启动 并根 据请求提供相应服务 1 打开通信通道并告知本地主机 它愿意在某一公认地址上接收客户请求 2 等待客户请求到达该端口 3 接收到服务请求 处理该请求并发送应答信号 服务完成后 关闭与客户的通信 链路 并终止 4 返回第二步 等待客户请求 5 关闭服务器 客户方 1 打开一通信通道 并连接到服务器所在主机的特定端口 2 向服务器发服务请求 等待并接收应答 3 请求结束后关闭通信通道并终止 由此可知 1 客户与服务器进程的作用是非对称的 因此编码不同 2 服务进程一般是先于客户请求而启动的 只要系统运行 该服务进程一直存在 直到正常终止或被强迫终止 2 2 系统实现原理 2 2 1 Win32 编程原理 所谓的 Win32 开发 就是在 C 语言的层面上 直接使用 Win32 API 开发 Windows 应 用程序或者系统程序 虽说现在直接用 Win32 API 开发应用程序的人已经不多了 但是 深入理解 Windows 系统程序设计原理 仍然是成为 Windows 开发高手的良好途径 所谓 精选范本 的 Win32 其实是一个 API 规范 与 UNIX 系统编程接口标准 POSIX 是相对应的 下面 是进行直接的 WIN32 SDK 方式编程的基本思路或者说是一个框架 一个 WINDOWS 程序分为程序代码和 UI User Interface 用户接口 资源两大部份 两 部份最后以 RC 编译程序整合为一个完整的 EXE 文件 所谓 UI 资源是指功能菜单 对话 框 程序图标 光标形状等等东西 这些 UI 资源的实际内容 二进制代码 系借助各种 工具产生 并以各种扩展名存在 如 ico bmp cur 等等 程序员必须在一个所谓的资源 描述档 rc 中描述它们 RC 编译器 RC EXE 读取 RC 文件的描述后将所有 UI 资源文件集中制作出一个 RES 文件 再与程序代码结合在一起 这才是一个完整的 Windows 可执行文件 与控制台程序相同的是 一个 WIN32 程序也必须有一个程序入口点 但是在这儿它 不再叫 main 而叫做 WinMain 当 WINDOWS 的 SHELL 检测到用户欲执行一个 EXE 程 序 就会调用加载器把程序进行加载 然后调用 C startup code 后者再调用 WinMain 程 序的执行就开始了 WinMain 函数的原型为 int CALLBACK WinMain HINSTANCE hInstance HINSTANCE hPrevInstance LPSTR lpCmdLine int nCmdShow 图 2 1 32 位 WINDOWS 程序的开发流程 下面程序必须进行必要的初始化工作 产生窗口 第一步是注册一个窗口类 用 API 函数 RegisterClass 而这个函数需要一个已经定义好的系统结构 WNDCLASS 这个结 构里面定义了窗口的种种属性 需要自己定义 但是许多属性都有默认值 然后调用 CreateWindow 函数来产生具有上述定义属性的已注册窗口 但是需要注意的是它只是生 成窗口 但并不显示之 所以还需要调用一个函数 ShowWindow 将它显示在屏幕上 做 完这些初始化工作以后 系统将进入消息循环 精选范本 while GetMessage DispatchMessage 当消息循环捕捉到消息以后将交由窗口函数 WndProc 窗口函数进行相应的处理 这 样 一个基于消息事件驱动的 WIN32 程序的雏形就建立了起来 由上面的介绍可以看出 直接用 API 函数开发一个 WIN32 程序是相当麻烦的 有好 多既定的重复性的工作要做 所以微软就用 C 的类机制将绝大部分的 API 函数进行了 封装 构成了类 并且将基本的流程也封装在类机制下面 大大简化了 WIN32 开的的复 杂性 尤其是在开发比较大型程序的时候这个便宜性更会得以体现 它就是 Microsoft Foundation Classes 简称为 MFC 可以说它是 VC 开发环境的一个核心构件 MFC 构架了一 个庞大的类体系结构 在 4 0 时代就多达 189 个类 程序代码达 252 个文件 58 个头文 件 共 10MB 之多 MFC4 2 时又多加了 29 个类 但是最为主干的是下面类结构示图所 示的一些类 CObject CWndCDocument CWinThread CcmdTarge 图 2 2 MFC 类框架主体 CObject 是 MFC 类库的根类 下面 MFC 类库主要包括 1 CCmdTarget 类 是 CObject 类的子类 它是 MFC 库中所有具有消息映射属 性的类的公共基类 它的子类有 CWinThread 类 CWnd 类 CDocument 类 从 CCndTarget 类派生的类能在程序运行时动态创建对象 并处理命令消息 2 CWinThread 类 是 CCmdTarget 的子类 CWinThread 是所有线程类的基类 封装了应用程序操作的多线程功能 应用程序类 CWinApp 是 CWinThread 的子类 封 装了初始化 运行 终止应用程序的代码 精选范本 3 CWnd 类 窗口类 是 CcmdTarget 类的子类 从 CWnd 派生的类可以拥有 自己的窗口 并对它进行控制 窗口框架类 CFrameWnd 和 CView 类是 CWnd 的子类 前者创建和维护窗口的边框 菜单栏 工具栏 状态栏 负责显示和搜索用户命令 后 者负责为文档提供一个或几个视图 视图的作用是为修改 查询文档等任务提供人机交 互的界面 4 文档类 CDocument 类 是 CCmdTarget 类的子类 负责封装和维护文档 文 档包括应用程序的工作成果或环境设置数据等 可以是程序需要保存的任何内容 一个 MFC 应用程序并不直接操作上述类 而是以上述类为基类派生新的类 构建 Windows 应用程序的基本框架 构建一个基于 MFC 框架的程序 可以使用 MFC 的向导程序 但首先要明白 一个 基于 MFC 的程序可以有几种类型 基于单文档结构的程序 基于多文档结构的程序以及 基于对话框的应用程序 不同类型的程序具有不同的程序属性 使用其向导以及控件编 程 使得不论是界面编写 还是程序内核设计 都更加的简单 其中有合理的消息映射 机制 有方便的运行时类型识别功能 更有文档 视图结构设计 文档串行化功能等非常 多的优秀功能 2 2 2 TCP IP 协议简介 TCP IP 协议实际上就是在物理网上的一组完整的网络协议 其中 TCP 是提供传输层 服务 而 IP 则是提供网络层服务 TCP IP 主要包括以下协议 IP 网间协议 Internet Protocol 负责主机间数据的路由和网络上数据的存储 同时为 ICMP TCP UDP 提供分组发送服务 用户进程通常不需要涉及这一层 ICMP 网间报文控制协议 Internet Control Message Protocol 此协议处理网关和主机的 差错和传送控制 TCP 传输控制协议 Transmission Control Protocol 这是一种提供给用户进程的可靠 的全双工字节流面向连接的协议 它要为用户进程提供虚电路服务 并为数据可靠传输 建立检查 TCP IP 协议的核心部分是传输层协议 TCP UDP 网络层协议 IP 和物里层 2 2 3 Windows Socket 网络编程接口概述 在网络编程中最常用的方案便是 Client Server 客户机 服务器 模型 在这种方案中客 户应用程序向服务器程序请求服务 一个服务程序通常在一个众所周知的地址监听对服 务的请求 也就是说 服务进程一直处于休眠状态 直到一个客户向这个服务的地址提 出了连接请求 在这个时刻 服务程序被 惊醒 并且为客户提供服务 对客户的请求作出 适当的反应 精选范本 为了方便这种 Client Server 模型的网络编程 90 年代初 由 Microsoft 联合了其他几 家公司共同制定了一套 WINDOWS 下的网络编程接口 即 Windows Sockets 规范 它不 是一种网络协议 而是一套开放的 支持多种协议的 Windows 下的网络编程接口 现在的 Winsock 已经基本上实现了与协议无关 你可以使用 Winsock 来调用多种协议的功能 但 较常使用的是 TCP IP 协议 Socket 实际在计算机中提供了一个通信端口 可以通过这个端口与任何一个具有 Socket 接口的计算机通信 应用程序在网络上传输 接收的信息都通过这个 Socket 接口 来实现 微软为 Visual C 定义了 Winsock 类如 CAsyncSocket 类和派生于 CAsyncSocket 的 CSocket 类 它们简单易用 我们当然可以使用这些类来实现自己的网络程序 但是为了 更好的了解 Winsock API 编程技术 本设计中将使用底层的 API 函数实现 Winsock 平台 的即时通信工具 在 VC 中进行 WINSOCK 的 API 编程开发的时候 需要在项目中使用下面的三个文 件 否则会出现编译错误 1 WINSOCK H 这是 WINSOCK API 的头文件 需要包含在项目中 2 WSOCK32 LIB WINSOCK API 连接库文件 3 WINSOCK DLL WINSOCK 的动态连接库 位于 WINDOWS 的安装目录下 聊天系统的设计跟普通网站设计有着许多不同的地方 普通网站设计所考虑的因素 例如 普通网站需要对布局进入大量美化以及动画设计等等 而聊天室只要提供满足访 客双方直接实时聊天即可 因此 在设计聊天系统的过程中 必须要考虑好以下几个设 计要点 在 Internet 上的聊天程序一般都是以服务器提供服务端连接响应 使用者通过客户端 程序登录到服务器 就可以与登录在同一服务器上的用户交谈 这是一个面向连接的通 信过程 因此 程序要在 TCP IP 环境下 实现服务器端和客户端两部分程序 为了利用重载套接字的消息相应函数 必须从 CAsyncSocket 派生出自己的套接字类 有时为了分开监听套接字和客户端套接字 还应该分别派生监听套接字类和客户端套接字 类 利用这两类函数就可以开始写网络通信程序 整个过程可以分成三个阶段 连接建立 数据传和拆除连接 下面是 Socket 套接字介绍 Winsock 是一套开放的 支持多种协议的 Windows 下网络编程接口 是 Windows 网络编 程实是上的标准 应用程序通过调用 Winsock 的 API 实现相互间的通信 而 Winsock 利用下 层的网络通信协议功能和操作系统调用实现实际的通信工作 套接字 Sockets 是通信的基石 是支持 TCP IP 协议的网络通信的操作单元 可以将套接 字看作不同主机间的进程进行双向通信的端点 它构成了单个主机内及整个网络间的编程 界面 套接字存在于通信域中 通信域是为了处理一般的线程通过套接字通信而引进的一种 抽象概念 套接字通过通常和同一个域中的套接字交换数据 数据交换也可能穿越域的界限 精选范本 但这时一定要执行某种解释程序 Winsock 规范支持单一的通信域 即 Internet 域 各种进程 使用这个域互相之间用 Internet 协议簇来进行通信 Winsock 1 1 以上的版本支持其他的域 套接字可以根据通信性质分类 这种性质对于用户时可见的 应用程序一般仅在同一类 的套接字间通信 不过只要底层的通信协议允许 不同类型的套接字间也照样可以通信 进入九十年代后 随着计算机和网络技术的发展 很多数据处理系统都采用开放系 统结构的客户机 服务器网络模式 即客户机提出任务请求 通过网络发送给服务器 由 服务器做相应处理 执行被请求的任务 然后将结果返回给客户机 例如 银行 ATM 的 前置机和数据处理的主机之间即构成客户机 服务器网络模式 电话银行的前置机和银行 数据处理机之间也构成这种网络模式结构等 这样 如何在前置机和数据主机之间进行 信息交换 即进程网络通信 就成为实现这种网络模式的基础 而 TCP IP 的套接字技术 是解这一问题的有力工具 它从提出时就一直发挥着愈来愈重要的作用 并已成为 UNIX 操作系统下 TCP IP 网络编程标准 甚至 WINDOW JAVA 都配有它的通用接口 有了这 个强有力的工具 我们可以实现异种机 异种操作系统应用程序间的相互连接和通信 套接字 sockets 是支持 TCP IP 协议的网络通信的基本操作单元 可以将套接字看作不 同主机间的进程进行双向通信的端点 它构成了在单个主机内及整个网际间的编程界面 一般来说 跨机应用进程之间要在网络环境下进行通信 必须要在网络的每一端都要建 立一个套接字 两个套接字之间是可以建立连接的 也是可以无连接的 并通过对套接 字的 读 写 操作实现网络通信功能 类似于 UNIX 系统中的 I O 概念 像文件那样有 打开 读 写 关闭的方式 9 根据传输数据类型的不同 套按字可分为面向连接的数据套接字 streamsockets 和 无连接的数据报套接字 datagramsockets 两种类型 1 字节流套接字 字节流不按记录定界 在 TCP IP 协议簇中对应 TCP 协议 即传输控制协议 TransmitionControlProtocol 它是一个提供给用户进程可靠的全双工的面向连接的协议 大多数 INTERNET 应用程序如 ftp telnet 使用 TCP 协议 通信端点使用 TCP 对应的 INTERNET 地址互相连接 可保证按正确的顺序以及单一和可靠的地址传输数据 由于 它是字节流 所以包长包没有限制 信包传输也不重复 因而是一种常用的套接字类型 流套接字提供双向的 有序的 无重复并且无记录边界的数据流服务 它适应于处 理大量数据 网络传输层可以将数据分散或集中到合适尺寸的数据包中 流套接字是面向连接的 通信双方进行数据交换之前 必须建立一条路径 这样即确 定了它们之间存在的路径 又保证了双方都是活动的 可彼此相应的 但在通信双方之间 建立一个通信信道需要很多开支 除此以外 大部分面向连接的协议为保证发送无误 可能 会需要执行额外的计算机来验证正确性 为此会进一步增加开支 精选范本 2 数据报套接字 数据报对应记录型数据流 在 TCP IP 协议簇中对应 UDP 协议 即用户数据报协议 UserDatagramProtocol 利用数据报服务可实现一些简单的网络服务 如网点检测程序 PING 由于不建立连接 数据报协议比连接协议快 但不能保证所有数据都准确有序地 到达目的地 不保证顺序性 可靠性和无重复性 它是无连接的服务 以独立的信包进 行传输 通信端点使用 UDP 对应的 INTERNET 地址 双方不需互连 按固定的最大长度 进行传输 因而适用于单个报文传输 或较小文件的传输 数据报套接字支持双向的数据流 但不保证数据传输的可靠性 有序性 和无重复 性 也就是说 一个从数据报套接字接受信息的进程有可能发现信息重复 或者和发出 时间顺序不同的情况 此外 数据报套接字的一个重要特点是它保留了记录边界 数据报套接字是无连接的 它不保证接受端是否在监听 类似邮政服务 发信人把信装入 邮箱即可 至于收信人是否收到这封信或邮局是否会因为暴风雨未能按时将信件投入收信 人处等等 发信人都不得而知 因此 数据报并不十分可靠 需有程序员负责管理数据的排序 和可靠性 套接字的编程要点及过程 不论何种套接字编程 均采用客户机 服务器方式 其运 作过程基本类似 限于篇幅 这里仅介绍字节流套接字 字节流套按字的服务进程和客 户进程 在通信前必须创建各自的套接字以建立连接 然后对相应的套接字进行 读 写 操作 实现信息的交换 服务器进程创建套接字 服务进程总是先于客户进程启动 服 务进程首先调用 socket 函数创建自已端的一个字节流套接字 并提供三个参数 网络地 址类型 一般取 AF INEF AdressfamilyInterNET 套接字类型 这里取 SOCK STREAM 网络协议 缺省为 TCP IP 协议 对应参数为 0 给套接字地址变量赋 初值 在生成套接字后 要用服务器的地址先对 sockaddr in 结构变量赋初值 sockaddr in 它只适用 INTERNET 地址类型 含有 INTERNET 套接字地址类型 IP 端口 号 IP 地址等信息 地址类型可取定为 AF INET IP 地址对服务器可取任意合法地址 INADDR ANY IP 端口号可由用户设定 但要注意主机字节顺序向网络字节顺序的转换 给套接字命名 由 socket 函数创建的套接字是没有名字的 所谓命名 就是用 bind 函 数将服务器地址捆绑到创建的套接字上 服务器进程准备接受来自客户机的连接请求 首先调用 listen 函数 让服务器进程进入监听状态 然后调用 accept 函数 准备接受客 户机的连接信号 无连接请求时 服务进程被阻塞 客户进程调用 socket 函数创建已端 的套接字 给客户端的 sockaddr in 结构体变量赋值 地址类型仍可取 AF INET 端口号 和服务器方的端口号相同 欲连服务器的地址通过调用 inet addr 转换得到 也可通过 gethostbyname 函数将名字转换为指向 hostent 结构变量的指针 再将 hostent 结构变量的 地址成员用 bcopy 复制到 sockaddr in 结构变量上 客户方调用 connect 函数向服务进程 发出连接请求 当连接请求到来后 被阻塞服务进程的 accpet 函数生成一个新的字节流 套接字 并返回客户机的 sockaddr in 结构变量 从而在服务器应用程序中用新的被赋予 精选范本 客户机地址的套接字同客户进程进行连接 然后向客户方返回接受信号 一旦客户机的 套接字收到来自服务器的接受信号 则表示客户机与服务器双方已实现连接 任一方均 可向对方发送 也可接收对方发来的数据 这既可通过 send recv 函数来实现 也可 通过 read write 函数来交换数据 服务进程和客户进程可通过调用 shutdown 和 colse 关 闭套接字上的所有发送和接收操作 撤销套接字并中断连接 下面介绍一些基本概念 1 带外数据 带外数据 也称为 TCP 紧急数据 它是相连的每一对流套接字间的一个逻辑上独立的传 输通道 带外数据是独立于普通数据传输给用户的 这一抽象要求带外数据设备必须支持每 一时刻仅有一个带外数据信息等候发送 对于仅支持带外数据的通信协议来说 例如紧急 数据是与普通数据在同一序列发送

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论