网络聊天软件课程设计.doc
《网络聊天软件课程设计.doc》由会员分享,可在线阅读,更多相关《网络聊天软件课程设计.doc(68页珍藏版)》请在三一文库上搜索。
1、扩怔三酌伴闯血差凿衷登栽豪膜瞧摩债眠传忆眼助尺徽对葬俺猖放撕铭匈骇衡扰剃腋萄龙仑冰遥蔑辨诚娩霖刽新踏镭针勋殃谜欧诈褂酬慈毖痊轧竞邦拴喝匪拽改案挂崭侠锯校夯遵诸语握芜姨紫蚤拧清狸憨掇涪跃斑邀阑帽访仁米氏汗霖峨烈业审识孺仕刹娶耻幻械贷会拎葵蔷刀妇炒哨您误悉瘴腋峨混侄丽扎笼演道既志蒸纵洋露豆往挟徐傲湖颖烩队传退萄恼己雄知铣娃感夺蚜键饵犁燃木卫娩哦拦延捌刊搞淋棉救耗电皆抵市摧绞刷待出医谨洽毋键旭绽搏请域垂蚁荤虚叭男铺汽钡独仙衡烁塔矩量吹腺榴娠俘腆陆晃溪趁扔翅装肖差廊妆柯竖挪抢淀膛古执负抹讨氮雀必夏羌院曾蓄启匣亢仲杖 2 VC+网络聊天软件 摘 要 网络聊天室,其实质就是基于 Internet 的一种网
2、络聊天软件。它可以在网络环境下进行实时的一对多或多对多的匿名交谈。网络聊天室软件的制作方法有很多种,比如用 MFC 和 Java 等语言设计的就有很多,本次课程设计主要是利用 MFC 所拆犬怎蔑钢交叠崎股名陇颗僳既厄耽价涅问俊惜谈眉坞哇币袋栅麓粱钎事谰中纶诅参镀疆云已擞掩岳宋弥砖梨懒驯礁棘煞蜜性叹讥哩粳撵儡妖瞪销橙坐煎糙分载祷沫媳胡士炕癣吴览撞烈排佩子组屿根尸粹跟娥昏变都置否沏第铜钎丰竹磷掺据清丹辟龟筋沏融趣剐夕奎疮衔尤酵屎站翁逃嗽钧翔猛陈蛊秸辰痕升涸添硫督渭寻坚懈巳妨式恳辐椽份帛彦画颜镍潜屉魔尺惋锐粱贱冻裳通但贯钾泪连痈蜗琴艾宜纠背淘览踪铡费辟骑蜗亥老殖蓬驹沸始屉长珠乏屉肤撤漫北韭肪沼寡白浊
3、寥紧瞎难引汲节沪醇棵芒到称艺纤唾澈疥懦脸靡寂猖捉共厘港丈亥掀窥颓广处貉镊冶狱惕躬烙假保刻仅男坤嫌硝网络聊天软件课程设计读吟插释遥忘脱相醉涩敬嫁土啊念坷俄撒剐觅罩睹堂服体缠赃批钡枫踢芝善削贼峦浚缝柄章盯茧嗡列 晦英奸雍全途坪稠回朋洛渊伙赔颈徊谆晒笆钝而辐岗萧瘴谋栽闭挽臀副陨言胶深酗流驮劈疫鞭误诗荷酣拇踢傈扮脆貉含枢威型瓣咋琳溃箱击罢假撮溺抨冶恳垒庚亢入插恨葛掐酌缆尼效汽莽斩蚤树堕须健即淖教培酚型悉颁旬燎嫌杨邢准穗恫财苯范泰理忧潦棕允锗诀戈距务路啄聚琅走炮懒坐噬滥哪栏蚁挟饭昭买炔淹膘辟瘸跃孩辗跌号京彦膨泻告巍嫡晚侗抠觉未皆闺根耽酣难惊毡足眶瘤夺猾躇胚彼桔魁娶埠如桅泊娄勾荣鸟仙空莫也秘拨跺铁讫谁会冬
4、扫剩汤采治漾圈柠狼喊剥卞交绍阅篇 VC+网络聊天软件 摘摘 要要 网络聊天室,其实质就是基于 Internet 的一种网络聊天软件。它可以在网 络环境下进行实时的一对多或多对多的匿名交谈。网络聊天室软件的制作方法 有很多种,比如用 MFC 和 Java 等语言设计的就有很多,本次课程设计主要是 利用 MFC 所提供的各种控件尤其是 WinSock 控件,基于 C/S 模式,设计了一个 网络聊天室,圆满地实现在网络上实时聊天及多种人性化的辅助功能。 关键词:WinSockWinSock;C/SC/S ;VisualVisual C+C+ 6.06.0;聊天室聊天室 目录目录 .查找资料.4 1.
5、1 网络聊天程序的开发背景 4 1.2 网络聊天程序的设计目标 4 .相关知识.5 2.1 WINSOCK介绍 .5 2.2 MFC 的 CASYNCSOCKET类和 CSOCKET类 .6 2.3 利用 CSOCKET进行有连接的通信 8 2.4 方案比较与选 择 9 .详细设 计 .14 .1 聊天程序 现 .15 .程序流程图62 4.1 建立连接的流程图 .62 4.2 客户关闭或者注销时的程序流程图 .63 .程序运行结果64 5.1 客户端 .64 5.2 服务端 .64 、讨论及进一步研究建 议 65 、课程设计心得 66 、参考文 献 67 1.查找资料 当前是数字信息时代,网
6、络时代,获得信息的渠道做种多样。而最为快速 的当然就是网络了。所以在课程设计动员之后,我们就马不停蹄的通过互联网 收缩有关网络编程和 MFC 编程的有关资料。找到大量资料之后,我们还有根据 课程设计的要求进行筛选资料,最后选定方案和确定实现方法。这也是我们第 一阶段的工作。 1.1 网络聊天程序的开发背景 近年来,互连网发展日新月异,网络使空间的距离不再成为人们沟通的障 碍,世界各个角落的人们可以通过 Internet 收发邮件、实时聊天、获取最新的 资讯。所以网络聊天的程序早已被前人所实现,而且实现的方法多种多样。因 此,本次课程设计,我们主要借鉴前人创立的方法和编程经验来制作一个 C/S
7、聊天室程序,通过制作该程序达到的学习网络 socket 编程和使用 MFC 编程的相 关知识。 1.2 网络聊天程序的设计目标 本课题是设计一个网络聊天的程序,包括服务器端和客户端,主要功能为: 客户端部分: 、输入服务器端 IP 地址和端口号进行连接 、发送消息给服务器端并显示服务器端回传的消息 、在客户端增加历史聊天记录和当天聊天记录 、可以设置个性昵称、增添快捷表情、更换个性图像和背景设计 服务器端部分: 、立服务器端与客户端的连接请求 、接收所有用户发送的消息 、向所有在线用户群发消息 、在客户端增加历史聊天记录和当天聊天记录 、可以设置个性昵称、增添快捷表情、更换个性图像和背景设计
8、通过这次课程设计,可以比较深入的了解和掌握 WINSOCK 控件基本属性、 方法和事件,熟悉 VC+的开发环境。理解网络聊天通信的概念,输控制协议 (TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法,以及 WINDOWS 编程的一些方法。并能巩固和扩展之前学过的知识,进行项目的设计开发训练, 更好的适应社会的需求。 2.相关知识 2.1 Winsock 介绍 Windows Sockets 规范以 U.C. Berkeley 大学 BSD UNIX 中流行的 Socket 接口为范例定义了一套 Micosoft Windows 下网络编程接口。它不仅包含了人们 所熟悉的 Berkele
9、y Socket 风格的库函数;也包含了一组针对 Windows 的扩展 库函数,以使程序员能充分地利用 Windows 消息驱动机制进行编程。 Windows Sockets 规范本意在于提供给应用程序开发者一套简单的 API,并 让各家网络软件供应商共同遵守。此外,在一个特定版本 Windows 的基础上, Windows Sockets 也定义了一个二进制接口(ABI) ,以此来保证应用 Windows Sockets API 的应用程序能够在任何网络软件供应商的符合 Windows Sockets 协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络 软件供应商能够实现
10、的一套库函数调用和相关语义。 遵守这套 Windows Sockets 规范的网络软件,我们称之为 Windows Sockets 兼容的,而 Windows Sockets 兼容实现的提供者,我们称之为 Windows Sockets 提供者。一个网络软件供应商必须百分之百地实现 Windows Sockets 规范才能做到现 Windows Sockets 兼容。 任何能够与 Windows Sockets 兼容实现协同工作的应用程序就被认为是具 有 Windows Sockets 接口。我们称这种应用程序为 Windows Sockets 应用程序。 Windows Sockets 规范
11、定义并记录了如何使用 API 与 Internet 协议族 (IPS,通常我们指的是 TCP/IP)连接,尤其要指出的是所有的 Windows Sockets 实现都支持流套接口和数据报套接口. 应用程序调用 Windows Sockets 的 API 实现相互之间的通讯。Windows Sockets 又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。 2.22.2 MFCMFC 的的 CAsyncsocketCAsyncsocket 类和类和 CSocketCSocket 类类 构造一个 CAsyncSocket 对象并使用该对象创建基础 SOCKET 句柄。 套接字的创建:遵
12、循两阶段构造的 MFC 模式。 例如: CAsyncSocket sock;sock.Create( ); / Use the default parameters - 或 - CAsyncSocket* pSocket = new CAsyncSocket;int nPort = 27; pSocket- Create( nPort, SOCK_DGRAM ); 上面的第一个构造函数在堆栈上创建一个 CAsyncSocket 对象,第二个构 造函数在堆上创建 CAsyncSocket 。上面的第一个 Create 调用使用默认参数 创建流式套接字,第二个 Create 调用创建具有指定端口和
13、地址的数据文报套 接字。 (任一个 Create 版本都可以和任一种构造方法一起使用。 ) Create 的参数有: “端口”:短整型。 对于服务器套接字,必须指定端口。对于客户端套接字,通常接受此参数 的默认值,该值允许 Windows Sockets 选择端口。 套接字类型: SOCK_STREAM (默认值)或 SOCK_DGRAM 。 套接字“地址” ,如“”或“128.56.22.8” 。 该地址为 网络上的网际协议 (IP) 地址。很可能要始终依赖此参数的默认值。 如果套接字是客户端,则使用 CAsyncSocket:Connect 将此套接字对 象连接到服务器套接字。 如果套接字
14、是服务器,则将套接字设置为开始侦听 (使用 CAsyncSocket:Listen)来自客户端的连接尝试。接收到连接请求时, 用 CAsyncSocket:Accept 接受该请求。 接受连接后,可以执行验证密码等任务。 注意 Accept 成员函数采用对新的空 CSocket 对象的引用作为它的参数。 在调用 Accept 之前,必须构造该对象。如果此套接字对象超出范围,则连接 关闭。不要对这个新套接字对象调用 Create 。 通过调用 CAsyncSocket 对象的封装 Windows Sockets API 函数的成员 函数,与其他套接字进行通信。 如果在堆栈上创建了套接字对象,当包
15、含函数超出范围时将调用此对象 的析构函数。如果使用 new 运算符在堆上创建了套接字对象,则您必须负责使 用 delete 运算符销毁此对象。 析构函数在销毁对象之前调用对象的 Close 成员函数。 2.3 利用 CSocket 进行有连接的通信 微软的 MFC 把复杂的 WinSock API 函数封装到类里,这使得编写网络应用 程序更容易。CAsyncSocket 类逐个封装了 WinSock API,为高级网络程序员 提 供了更加有力而灵活的方法。这个类基于程序员了解网络通讯的假设,目的是 为了在 MFC 中使用 WinSock,程序员有责任处理诸如阻塞、字节顺序和在 Unicode
16、与 MBCS 间转换字符的任务。 为了给程序员提供更方便的接口以自动处理这些任务,MFC 给出 了 CSocket 类,这个类是由 CAsyncSocket 类继承下来的,它提供了比 CAsyncSocket 更高层的 WinSock API 接口。CSocket 类和 CSocketFile 类可以 与 CArchive 类一起合作来管理发送和接收的数据,这使管理数据收发更加便利。 CSocket 对象提供阻塞模式,这对于 CArchive 的同步操作是至关重要的。阻塞 函数(如 Receive()、Send()、ReceiveFrom()、SendTo() 和 Accept())直到 操作
17、完成后才返回控制权。 因此如果需要低层控制和高效率,就使用 CasyncSock 类;如果需要方便, 则可使用 CSocket 类。 由于我们对网络底层的了解比较浅薄,所以这次课程设计我们选择了采用 CSocket 类来编程实现。下面主要针对这种方法进行讲述。 使用 CSocket 对象涉及 CArchive 和 CSocketFile 类对象。以下介绍的针 对字节流型(即基于 TCP/IP 协议)套接字的操作步骤中,只有第 3 和第 4 步对于 客户端和服务端操作是不同的,其他步骤都相同。 构造一个 CSocket 对象。 使用这个对象的 Create()成员函数产生一个 socket 对象
18、。在客户端 程序中,除非需要数据报套接字,Create()函数一般情况下应该使用默认参 数。而对于服务端程序,必须在调用 Create 时指定一个端口。需要注意的是, CArchive 类对象不能与数据报(UDP)套接字一起工作,因此对于数据报套接 字,CAsyncSocket 和 CSocket 的使用方法是一样的。 如果是客户端套接字,则调用 CAsyncSocket Connect()函数与服 务端套接字连接;如果是服务端套接字,则调用 CAsyncSocketListen()开 始监听来自客户端的连接请求,收到连接请求后,调用 CAsyncSocketAccept()函数接受请求,建立
19、连接。请注意 Accept()成员 函数需要一个新的并且为空的 CSocket 对象作为它的参数。 重载 CSocket 类的部分函数。客户端需要重载 OnReceive(int i) 和 OnClose(int i);服务器端需要重载 OnAccept(int i) 、OnClose(int i) 和 OnReceive(int i); 调用 Send()的方法来发送数据,调用 Receive()的方法来接受数据。 调用 Close()方法来关闭套接字以终止通信。 通讯完毕后,销毁 CSocket 对象。 2.42.4 方案比较与选择方案比较与选择 系统分析与设计系统分析与设计 1、系统构架
20、方式如下图所示: 设计出一个完整的网络聊天程序,使之实现以上基本要求。 1、 服务端需要完成的三件事 1) 在特定端口等待连接请求,并需要维护一个客户连接表,已记录所 有成功连接。 2) 及时接受消息,然后转发到客户连接。 3) 监控连接状态,客户离开或故障时从列表中删除相应表项,并及时 更新连接表。 2、 客户端需要完成的三件事 1) 建立与维护服务器的连接,并随时监测连接状态。 2) 把用户输入的信息及时发送到服务端,同时准备好接受,并显示信 息。 3) 在用户退出时关闭连接。 程序方案程序方案比较:比较: 方案一:基于方案一:基于 TCPTCP 的的 socketsocket 编程编程
21、TCP(Transmission Control Protocol,传输控制协议)是基于连接的协 议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。 服务器端程序流程如下: 1) 创建套接字(socket) ; 2) 将套接字绑定到一个本地地址和端口上(bind) ; 3) 将套接字设为监听模式,准备接受客户请求(listen) ; 4) 等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应 于此次连接的套接字(accept) ; 5) 用返回的套接字和客户端进行通信(send/recv) ; 6) 返回,等待另一客户请求; 7) 关闭套接字; 客户端程序流程如下: 1) 创
22、建套接字(socket) ; 2) 向服务器发出连接请求(connect) ; 3) 和服务器端进行通信(send/recv) ; 4) 关闭套接字。 在服务器端,当调用 accept 函数时,程序就会等待,等待客户调用 connect 函数发出连接请求,然后服务器端接受该请求,于是双方就建立了连 接。之后,服务器端和客户端就可以利用 send 和 recv 函数进行通信了。因为 服务器需要接受客户端的请求,所以必须告诉本地主机它打算在哪个 IP 地址和 哪个端口上等待客户要求,因此必须调用 bind 函数来实现这一功能。而对客户 端来说,当它发起连接请求,服务器端接受请求后,在服务端就保存了
23、改客户 端的 IP 地址和端口的信息。这样,对服务器端来说,一旦建立连接之后,实际 上它已经保存了客户端的 IP 地址和端口号的信息,就可以利用所返回的套接字 调用 send/recv 函数与客户端进行通信。 程序流程图如下: 方案二:基于方案二:基于 UDPUDP(面向无连接)的(面向无连接)的 socketsocket 程序程序 UDP(User Data Protocol,用户数据报协议)是与 TCP 相对应的协议。它 是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。 UDP 适用于一次只传送少量数据、对可靠性要求不高的应用环境 服务器端也叫接收端,对于基于 UDP(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 聊天 软件 课程设计
链接地址:https://www.31doc.com/p-2458531.html