您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > VC++网络聊天软件课程设计
1摘要网络聊天室,其实质就是基于Internet的一种网络聊天软件。它可以在网络环境下进行实时的一对多或多对多的匿名交谈。网络聊天室软件的制作方法有很多种,比如用MFC和Java等语言设计的就有很多,本次课程设计主要是利用MFC所提供的各种控件尤其是WinSock控件,基于C/S模式,设计了一个网络聊天室,圆满地实现在网络上实时聊天及多种人性化的辅助功能。关键词:WinSock;C/S;VisualC++6.0;聊天室2目录1.查找资料.........................................................31.1网络聊天程序的开发背景........................................31.2网络聊天程序的设计目标........................................32.相关知识.........................................................52.1WINSOCK介绍...................................................52.2MFC的CASYNCSOCKET类和CSOCKET类...............................62.3利用CSOCKET进行有连接的通信..................................82.4方案比较与选择...............................................93.详细设计........................................................143.1聊天程序现....................................................154.程序流程图......................................................624.1建立连接的流程图.............................................624.2客户关闭或者注销时的程序流程图...............................635.程序运行结果....................................................645.1客户端.......................................................645.2服务端.......................................................646、讨论及进一步研究建议...........................................657、课程设计心得..................................................668、参考文献.......................................................6731.查找资料当前是数字信息时代,网络时代,获得信息的渠道做种多样。而最为快速的当然就是网络了。所以在课程设计动员之后,我们就马不停蹄的通过互联网收缩有关网络编程和MFC编程的有关资料。找到大量资料之后,我们还有根据课程设计的要求进行筛选资料,最后选定方案和确定实现方法。这也是我们第一阶段的工作。1.1网络聊天程序的开发背景近年来,互连网发展日新月异,网络使空间的距离不再成为人们沟通的障碍,世界各个角落的人们可以通过Internet收发邮件、实时聊天、获取最新的资讯。所以网络聊天的程序早已被前人所实现,而且实现的方法多种多样。因此,本次课程设计,我们主要借鉴前人创立的方法和编程经验来制作一个C/S聊天室程序,通过制作该程序达到的学习网络socket编程和使用MFC编程的相关知识。1.2网络聊天程序的设计目标本课题是设计一个网络聊天的程序,包括服务器端和客户端,主要功能为:客户端部分:1、输入服务器端IP地址和端口号进行连接2、发送消息给服务器端并显示服务器端回传的消息3、在客户端增加历史聊天记录和当天聊天记录4、可以设置个性昵称、增添快捷表情、更换个性图像和背景设计4服务器端部分:1、立服务器端与客户端的连接请求2、接收所有用户发送的消息3、向所有在线用户群发消息4、在客户端增加历史聊天记录和当天聊天记录5、可以设置个性昵称、增添快捷表情、更换个性图像和背景设计通过这次课程设计,可以比较深入的了解和掌握WINSOCK控件基本属性、方法和事件,熟悉VC++的开发环境。理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法,以及WINDOWS编程的一些方法。并能巩固和扩展之前学过的知识,进行项目的设计开发训练,更好的适应社会的需求。52.相关知识2.1Winsock介绍WindowsSockets规范以U.C.Berkeley大学BSDUNIX中流行的Socket接口为范例定义了一套MicosoftWindows下网络编程接口。它不仅包含了人们所熟悉的BerkeleySocket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。WindowsSockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,WindowsSockets也定义了一个二进制接口(ABI),以此来保证应用WindowsSocketsAPI的应用程序能够在任何网络软件供应商的符合WindowsSockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。遵守这套WindowsSockets规范的网络软件,我们称之为WindowsSockets兼容的,而WindowsSockets兼容实现的提供者,我们称之为WindowsSockets提供者。一个网络软件供应商必须百分之百地实现WindowsSockets规范才能做到现WindowsSockets兼容。任何能够与WindowsSockets兼容实现协同工作的应用程序就被认为是具有WindowsSockets接口。我们称这种应用程序为WindowsSockets应用程序。WindowsSockets规范定义并记录了如何使用API与Internet协议族(IPS,通常我们指的是TCP/IP)连接,尤其要指出的是所有的WindowsSockets6实现都支持流套接口和数据报套接口.应用程序调用WindowsSockets的API实现相互之间的通讯。WindowsSockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。2.2MFC的CAsyncsocket类和CSocket类构造一个CAsyncSocket对象并使用该对象创建基础SOCKET句柄。①套接字的创建:遵循两阶段构造的MFC模式。例如:CAsyncSocketsock;sock.Create();//Usethedefaultparameters-或-CAsyncSocket*pSocket=newCAsyncSocket;intnPort=27;pSocket-Create(nPort,SOCK_DGRAM);上面的第一个构造函数在堆栈上创建一个CAsyncSocket对象,第二个构造函数在堆上创建CAsyncSocket。上面的第一个Create调用使用默认参数创建流式套接字,第二个Create调用创建具有指定端口和地址的数据文报套接字。(任一个Create版本都可以和任一种构造方法一起使用。)Create的参数有:“端口”:短整型。对于服务器套接字,必须指定端口。对于客户端套接字,通常接受此参数的默认值,该值允许WindowsSockets选择端口。套接字类型:SOCK_STREAM(默认值)或SOCK_DGRAM。套接字“地址”,如“ftp1.scau.edu.cn”或“128.56.22.8”。该地址为网络上的网际协议(IP)地址。很可能要始终依赖此参数的默认值。②如果套接字是客户端,则使用CAsyncSocket::Connect将此套接字对象连接到服务器套接字。如果套接字是服务器,则将套接字设置为开始侦听(使用CAsyncSocket::Listen)来自客户端的连接尝试。接收到连接请求时,用7CAsyncSocket::Accept接受该请求。③接受连接后,可以执行验证密码等任务。注意Accept成员函数采用对新的空CSocket对象的引用作为它的参数。在调用Accept之前,必须构造该对象。如果此套接字对象超出范围,则连接关闭。不要对这个新套接字对象调用Create。④通过调用CAsyncSocket对象的封装WindowsSocketsAPI函数的成员函数,与其他套接字进行通信。⑤如果在堆栈上创建了套接字对象,当包含函数超出范围时将调用此对象的析构函数。如果使用new运算符在堆上创建了套接字对象,则您必须负责使用delete运算符销毁此对象。析构函数在销毁对象之前调用对象的Close成员函数。82.3利用CSocket进行有连接的通信微软的MFC把复杂的WinSockAPI函数封装到类里,这使得编写网络应用程序更容易。CAsyncSocket类逐个封装了WinSockAPI,为高级网络程序员提供了更加有力而灵活的方法。这个类基于程序员了解网络通讯的假设,目的是为了在MFC中使用WinSock,程序员有责任处理诸如阻塞、字节顺序和在Unicode与MBCS间转换字符的任务。为了给程序员提供更方便的接口以自动处理这些任务,MFC给出了CSocket类,这个类是由CAsyncSocket类继承下来的,它提供了比CAsyncSocket更高层的WinSockAPI接口。CSocket类和CSocketFile类可以与CArchive类一起合作来管理发送和接收的数据,这使管理数据收发更加便利。CSocket对象提供阻塞模式,这对于CArchive的同步操作是至关重要的。阻塞函数(如Receive()、Send()、ReceiveFrom()、SendTo()和Accept())直到操作完成后才返回控制权。因此如果需要低层控制和高效率,就使用CasyncSock类;如果需要方便,则可使用CSocket类。由于我们对网络底层的了解比较浅薄,所以这次课程设计我们选择了采用CSocket类来编程实现。下面主要针对这种方法进行讲述。使用CSocket对象涉及CArchive和CSocketFile类对象。以下介绍的针对字节流型(即基于TCP/IP协议)套接字的操作步骤中,只有第3和第4步对于客户端和服务端操作是不同的,其他步骤都相同。①构造一个CSocket对象。②使用这个对象的Create()成员函数产生一个socket对象。在客户端程序中,除非需要数据报套接字,Create()函数一般情况下应该使用默认参数。而对于服务端程序,必须在调用Create时指定一个端口。需要注意的是,CArchive类对象不能与数据报(UDP)套接字一起工作,因此对于数据报套接字,CAsyncSocket和CSocket的使用方法是一样的。③如果是客户端套接字,则调用CAsyncSocket∷Connect()函数与服务端套接字连接;如果是服务端套接字,则调用CAsyncSocket∷Listen()开始监听来自客户端的连接请求,收到连接请求后,调用CAsyncSocket∷Accept()函数接受请求,建立连接。请注意Accept()成员函数需要一个新的并且为空9的CSocket对象作为它的参数。④重载CSocket类的部分函数。客户
本文标题:VC++网络聊天软件课程设计
链接地址:https://www.777doc.com/doc-6327161 .html