VC++高级程序设计大作业基于局域网的聊天室设计与开发.doc
《VC++高级程序设计大作业基于局域网的聊天室设计与开发.doc》由会员分享,可在线阅读,更多相关《VC++高级程序设计大作业基于局域网的聊天室设计与开发.doc(21页珍藏版)》请在三一办公上搜索。
1、基于局域网的聊天室设计与开发摘要 系统是在在VC+6.0开发环境下使用基于对话框架构和网络编程技术实现了一个基于局域网的聊天室。系统分为客户端程序和服务器端程序,两者分开运行。服务器提供主机IP地址和端口供众多的客户端连接。既可以一对一聊天,也可以一对多聊天。关键字:聊天室;局域网;基于对话框;Socket通信目录1.开发环境介绍11.1 Visual C+6.0集成开发环境使用方法介绍11.2WinSock技术51.2.1WinSock概述51.2.2CSocket类编程模型62.基于局域网的聊天室设计72.1系统总体目标72.2系统功能模块图73.基于局域网的聊天室实现83.1 服务器开启
2、与客户连接以及局域网通信83.2系统各个模块的实现103.2.1服务器103.2.2客户端154.系统测试185. 总结19参考文献191.开发环境介绍1.1 Visual C+6.0集成开发环境使用方法介绍本系统涉及的C+语言源程序,均在Visual C+ 6.0(后简称VC6)开发环境中进行编制和调试。这里将简要介绍VC6集成开发环境的使用和调试方法。1VC6的用户界面介绍双击安装好的VC6图标后,可以看到附图1.1所示的界面,此时VC6处于编辑状态。图1.1 VC+ 6.0编辑状态的用户界面其中菜单栏集成了VC6的各种命令、功能和设置;工具栏则将最常用的命令、功能和设置直接用图标的形式给
3、出,方便用户使用;“Workspace”子窗口(工作空间子窗口)可以把VC6工程中使用的各种类和文件按树形结构来浏览;文件子窗口则用来具体显示和编辑VC6工程所用到的文件,比如C+源文件、头文件等;输出子窗口用来显示编译、连接或者搜索等操作的结果。2VC 6集成开发环境的使用简介(1)创建VC6工程要使用VC6来编译一个C或者C+源文件,必须把这个文件插入一个VC6工程中,因此,先介绍VC6工程的创建步骤: 点击“File”菜单,选择“New”菜单项,弹出“New”窗口; 切换“New”窗口选项卡为“Projects”,选择“Win32 Console Application”(Win32控制
4、台应用程序),本书只使用这类工程即可; 在“Location:”下的文本框内填入工程保存的文件夹位置,也可以点其右侧的“”按钮来定位文件夹; 在“Project name:”下的文本框内填入工程的名称,例如Prj1。其它设置不用更改; 点“OK”后,出现“Win32 Console Application”设置向导窗口,选“An empty project”,点“Finish”,再点“OK”后,工程创建结束。这时,一个空的Win32 Console Application工程就创建好了。此时,“Workspace”子窗口就会显出“ClassView”(类浏览)和“FileView”(文件浏览)
5、两个选项卡。本书不使用类来编程,因此不介绍“ClassView” 选项卡。切换到“FileView”选项卡,可以看到树形的列表中,将工程所有的文件分为三大类,即“Source Files”(源文件)、“Head Files”(头文件)和“Resource Files”(资源文件)。本书程序不涉及自编头文件和资源文件,因此不必向这两类添加文件。而“Resource Files”下现在没有任何文件,需新建或者利用已有的源文件插入工程中,才能进行编译。(2)新建C或C+源文件并插入工程的方法 点击“File”菜单,选择菜单项“New”,弹出“New”窗口; 选择“New”窗口“Files”选项卡,选
6、择“C+ Source File”; 在“File”下的文本框内填入带后缀的源文件名,后缀为.c或是.cpp,分别代表C源文件和C+源文件,例如填入main.c; 保证“Add to project”前的复选框被选中,且其下的下拉列表框所选的工程为刚刚创建的空工程的名字; 点“OK”后,一个空的源文件main.cpp就被插入工程Prj1了。此时,文件子窗口会打开新建的源文件,以备编辑。至此,源文件的创建结束。(3)将原有的C或C+源文件插入工程的方法 右击“Workspace”子窗口“FileView”选项卡中的“Source Files”文件夹,选择“Add Files to Folder”
7、快捷菜单项; 选择需要插入工程的全部源文件,点“打开”,这时全部源文件就被插入工程中了。展开“Source Files”文件夹,可以看到其下有刚刚插入的全部源文件。双击其中一个,文件子窗口就会打开对应的源文件,并使之最前显示,进入编辑状态。同时,VC6标题栏内的中括号中会出现该文件的名字。(4)保存工程中被编辑过的一个或多个文件将新建或者已有的源文件插入工程中后,就可以在文件子窗口中对源文件中的程序代码进行编辑。编辑后,可以点击“Stantard”工具栏的两个按钮进行保存。其中,第一个按钮只是保存当前文件子窗口中最前端显示的被编辑文件,其对应的快捷键是Ctrl+S;第二个按钮则可保存全部源文件
8、。(5)编译、连接和调试VC6的工程编译和连接编译和连接对应的菜单为“Build”菜单,其中常用以下三个菜单项:“Compile”菜单项,只编译当前处于编辑状态的源文件;“Build 工程名.exe”菜单项,是在全部源文件编译之后,连接并生成可执行文件;“Rebuild All”项一般用在对源文件更改后,重新编译连接。如果发现任何的编译和连接错误或警告,VC6会在输出子窗口中给出提示。双击该提示,会转到源程序的出错行。可以搜索VC6的帮助以获取更多有关编译、连接错误的信息,以便排除这些错误和警告。错误及警告更正后,应用“Rebuild All”重新进行编辑和连接。 运行程序如需运行连接好的程序
9、,可选“Build”菜单下的“Execute 工程名.exe”菜单项。调试方法要进入调试状态,可以选择“Build”菜单下“Start Debug”子菜单中的菜单项。其中常用的是前三项:“Go”、“Step into”和“Run to Cursor”菜单项,它们的含义参见后述。VC6从编辑状态进入调试状态后,用户界面会有所变化。如图1.2所示,原“Workspace”子窗口会消失,“Build”菜单会变为“Debug”菜单,原输出子窗口会变成图1.2 VC+ 6.0调试状态的用户界面“Variables” 子窗口(变量子窗口)和“Watch” 子窗口(监视子窗口)。同时,在调试状态下,VC6会
10、打开“Debug”工具栏。这个工具栏各按钮的功能与“Debug”菜单中的各菜单项对应。下面将常用的“Debug”菜单项分别说明如下:a“Go”菜单项:按流程顺序批量运行程序语句,遇到断点(Breakpoint)时调试暂停;b“Restart”菜单项:重新开始调试;c“Stop Debugging”菜单项:停止调试,VC6返回编辑状态;d“Step into”菜单项:逐句执行源程序,并且如果遇到子程序会进入子程序内执行;e“Step over”菜单项:逐句执行源程序,但不会进入子程序中;f“Step out”菜单项:从当前的子程序中跳出,返回调用它的上一级程序;g“Run to Cursor”菜
11、单项:执行到文件子窗口中,当前被编辑源文件的光标所在行处。要使用“Go”菜单项,应在源文件的可执行语句前添加断点。有关断点的具体操作如下: 在文件子窗口中,打开想进行断点操作的行所在的源文件,并把光标移至该行; 右击该行,在快捷菜单中选择“Insert/Remove Breakpoint”(添加/删除断点)菜单项。如果该行之前未设过断点,这一行前就会出现一个棕色的实心圆点,表示该行被添加了断点;如果已设过的断点,则断点会被删除。 右击设置过断点的行,在快捷菜单中选择“Disable/Enable Breakpoint”(禁用/启用断点)菜单项,可以禁用或启用(都不会删除)断点。被禁用的断点显示
12、为棕色空心圆点,它们不会使调试暂停。最后,说明一下“Variables”子窗口和“Watch” 子窗口,它们在调试状态下非常有用。程序调试运行时,“Variables” 子窗口会自动选择的一些变量,并将它们的实时值用表格的形式显示在“Auto”选项卡中。“Watch”子窗口则可用来监视程序员指定的变量或者表达式的值,方法是将想要监视的变量或者表达式写在“Name”列下的各行中,回车后,就可看到它们的实时值。这两个窗口还可用来临时修正调试运行中的变量值,方法是在想要修改的变量后的“Value”单元格中,输入修改值,并回车,这时变量就被赋予了程序员临时给的值,而不再是程序原运行过程中被赋的值1。1
13、.2WinSock技术1.2.1WinSock概述Windows Sock(Windows套接字,简称WinSock)是微软根据UNIX操作系统中流行的Berkeley(伯克利)套接字规范,而实现的一套Microsoft Windows下的网络编程接口。微软的MFC把复杂的WinSock API函数封装到类里,这样大大减轻了程序员的负担,程序不需要明白底层通信具体的实现机制,使得编写网络应用程序更加快速、更加容易。主要有两个类:CAsyncSocket类和CSocket类。首先CAsyncSocket类几乎逐个封装了WinSock API,这个类是以程序员了解网络通讯为前提,程序员使用这个类的
14、时候,可以在MFC中使用WinSock,并且肩负着处理诸如阻塞、字节顺序和在Unicode与MBCS 间转换字符的责任,虽然给编程带来了一定的技术难度和较多的代码量,但是它为高级网络程序员提供了更加有力而灵活的方法。考虑到CAsyncSocket类在编程时,程序员考虑的问题还是比较多,MFC给出了CSocket类,这个类继承于CAsyncSocket类,它提供了比CAsyncSocket更高层的WinSock API接口。相比起来,CSocket类代表了一个比CAsyncSocket对象更高层次的Windows Socket的抽象,CSocket类与CSocketFile类和CArchive类
15、一起工作来发送和接收数据,除此之外CSocket类和CSocketFile类可以与Carchive类一起合作来管理发送和接收的数据,这使管理数据收发更加便利,因此使用CSocket类编写网络应用程序更加方便。但是它牺牲掉了CAsyncSocket类的灵活性。同时CSocket对象提供阻塞模式,所谓阻塞是指直到操作完成后才返回控制权,在完成操作返回之前进程被挂起,什么也不能做。常见的阻塞函数有Receive()、Send()、ReceiveFrom()、SendTo() 和Accept()。假如一个socket处于非阻塞模式(即异步操作),则会被调用函数立即返回,通信效率较高。对于CAsyncS
16、ocket类可以用GetLastError 成员函数查询最后的错误,如果错误返回值为WSAEWOULDBLOCK,则说明有阻塞,而CSocket绝不会返回WSAEWOULDBLOCK,因为它在自己类的内部已经实现了阻塞管理,减轻了程序员负担,但是却牺牲了通信的高效性。是不是使用CSocket类就不能实现类似CAsyncSocket类的高效非阻塞操作呢?也不是,使用使用多线程的方法既可以使程序员享受CSocket带来的简化编程的便利,也不会影响用户界面对用户的反应,可谓一举两得。 综合上述各个因素以及两个类的特点可以得知,如果需要低层控制和高效率,就使用CAsyncSock类;如果需要方便,则可
17、使用CSocket类;如果既想编程方便又想高效率通信,则可以联合使用CSocket类和多线程编程4。1.2.2CSocket类编程模型当我们在使用CSocket对象编写网络通信应用程序时候,需要涉及到CArchive类和CSocketFile 类对象。以下介绍的针对字节流型套接字CSocket类编程模型的实现过程中,服务器方和客户方的实现过程几乎没有什么差异,唯一的区别仅在第2步。1使用CSocket类产生一个对象,然后调用CSocket类对象的成员函数Create()产生一个Socket句柄。这个过程对于数据报套接字,CAsyncSocket和CSocket 的使用方法没有什么区别。2在这里
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 高级 程序设计 作业 基于 局域网 聊天室 设计 开发
链接地址:https://www.31ppt.com/p-2385707.html