网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > 课程设计 > 正文

VC++网络聊天系统

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
VC++网络聊天系统摘   要    在计算机技术高速发展的今天,实现人与人之间的即时交流已不是困难的事情。例如电话,发送Email等。这些都很方便,但在特定的情况下--比如只是在公司内部交流,这时成本、信息的即时和实现信息的再交流上达不到最适的平衡。在追求高效率的同时,并以低廉的成本实现局部范围内的信息及时准确的交流,聊天室便成了最好的选择之一。该局域网聊天室建立在局部网络中,只要是连入局域网络的计算机都可以方便的给使用者发送消息,并且占用很少的系统资源。在设计上,该局域网聊天系统运用软件工程的设计流程,综合运用了Windows程序设计技术、网络通讯技术、ADO数据库编程技术,以Visual C++6.0作为前台运用程序开发工具,进行软件开发。此聊天工具采用客户端/服务器端(C/S)模式,客户端采用TCP与服务器连接,客户端与客户端之间通过TCP相互通讯。服务器端有管理员登陆、管理页面组成。客户端有注册、登陆 、设置IP、用户主界面、聊天室等界面组成。本系统是根据实际的需求而设计,通过对计算机硬件和软件解决方案的论证,对实际应用领域进行深入的调查分析,已经基本上成功地实现了设计要求。关键字网络通讯; 客户端/服务器模型; 传输控制协议; 用户数据报协议; 微软基础类; 套接字ABSTRACT
  In the rapid development of computer technology today to achieve the immediate exchange between people is not difficult. Such as telephone, such as Email sent. These are very convenient, but in certain circumstances - for example only in-house exchange, then the cost, real-time information and the further exchange of information on up to less than optimal balance. In the pursuit of high efficiency, low cost and to achieve within the scope of local timely and accurate exchange of information, chat rooms, has become one of the best choice. The LAN chat rooms in the establishment of local networks, as long as it is connected to the LAN the computer can easily send messages to users, and occupation of the very few system resources. The design of the LAN systems use chat software engineering design process, the integrated use of the Windows programming technology, network communications technology, ADO database programming technology to Visual C + +6.0 future use as a tool for the development of procedures for software development. This chat tool use client / server (C / S) model, the client and server using TCP connection, the client and client communication between each other through TCP. Server administrator landing, the management of pages. Client registered, landing, set IP, the main user interface, chat rooms, and other interface components. The system is based on the actual needs of design, through the computer hardware and software solutions for the demonstration, the practical application of the field to conduct in-depth investigation and analysis has been largely successful in achieving the design requirements.Key wordsNetwork communications;client / server model;transmission control protocol; user data on the agreement; Microsoft basis; socket195
 
网络聊天系统目    录摘   要 1关键字 1ABSTRACT 2KEY WORDS 2目    录 31绪 论 11.1 选题的背景 11.2 选题的目的和意义 11.3 可行性分析 21.3.1 技术可行性 21.3.2 管理可行性 21.3.3 经济可行性 21.3.4 运行可行性 22系统开发环境和主要技术简介 32.1 VISUAL C++概述 32.1.1 Visual C++的简介 32.1.2 Visual C++的发展过程 32.1.3 Visual C++的特点 32.1.4 MFC和Visual C++ 42.2  ADO 42.2.1 ADO基本常识 42.2.2 ADO接口的工作原理 42.3 MFC SOCKET编程 52.3.1 MFC Socket编程机制 52.3.2 CSocket类编程模型 63系统总体设计 73.1 需求分析 73.2 功能概述 73.3 运行环境 73.4 系统总体方案设计 83.5数据字典 83.5.1.user_info -----用户基本信息表 83.5.2 manager-----管理员信息 94 系统详细设计 104.1服务器详细设计 104.1.1服务器结构设计 104.1.2服务器实现原理及功能描述 104.1.3 类设计 104.1.4 服务器界面设计及主要实现代码 104 .2客户端详细设计 194.2.1客户端结构设计 194.2.2客户端实现原理及功能描述 204.2.3 客户端界面设计及主要实现代码 215系统测试 315.1聊天系统的总体设计目标服务器端的总体设计目标: 315.2客户端的总体设计目标: 325.3测试结果 326设计心得 336.1 需求分析与系统设计阶段心得 336.2 测试阶段心得 336.3统实施和维护阶段心得 33结束语 34致  谢 34参考文献 195
 
网络聊天系统源代码1绪 论展望新世纪,市场全球化的浪潮势不可挡,WTO已经向我们走来,企业间的竞争变得更加激烈。如何面对这样激烈的竞争,是摆在我国企业面前的最紧迫的问题。信息在竞争中已经越来占有成分,可以说最后的制胜关键就是信息的即时性,在企业内部实现信息交流的即时性也就变的非常重要。
1.1 选题的背景 随着网络的普及化,网络作为人们相互沟通与交流联系的现代化工具日益重要,可以说现在的人们的生活已经离不开网络。在现在生活中人们虽然可以通过很多手段进行联系,但是对于一些具体的情况这些手段已经满足不了高效低成本的要求。于是针对满足局域范围内实现即时交流我们选择了局域网聊天室。随着网络技术和数据库管理系统的发展,C/S体系结构在软件的开发中越来越受到人们的认可。因为这种结构的应用软件充分的发挥了网络的作用和数据库的优势。同时,Microsoft公司的Visual C++编程开发环境,已经成为各国程序员开发系统和应用程序的首选工具。这是由于它有功能强大,支持面向对象,模块化和代码可以重写等特点,可以大大提高软件和系统的效率。网络的飞速发展使得网络应用程序开发显的越来越重要,但是网络应用程序开发和传统的开发思想和实现上有很大区别。Microsoft公司的Visual C++编程开发环境在进行网络应用程序开发方面有以下几个特点:开发出的应用程序占有资源少、开发人员有灵活多变的开发方式、如果使用VC的MFC类库则可以使用开发人员从很大程度上简化开发过程、可使用应用程序有很强的扩展性。基于网络编程的日益流行和重要,以及Visual C++对网络编程所提供的全面技术支持,我决定采用Visual C++作为我毕业设计网络聊天工具的前端开发环境。而后端数据库采用Microsoft公司的Access  2003.
1.2 选题的目的和意义    随着网络的飞速发展,为了适应网络的发展和充分的利用网络的价值,一种基于网络的通信工具就被开发出来——聊天室系统。它是一个即时通信软件,以方便公司内部员工和亲朋好友之间的通信联系,并且大大的降低了因人们联系所花费的费用。1.3 可行性分析可行性分析(Feasibility Analysis)也称为可行性研究,是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和研究,以避免投资失误,保证新系统的开发成功。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。该系统的可行性分析包括以下几个方面的内容。1.3.1 技术可行性技术上的可行性分析主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。该系统采用了当前流行的C、C++和MFC等语言进行开发,借助Visual C++搭建框架,因此,系统的软件开发平台已成熟可行。硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。1.3.2 管理可行性主要除了一些老年人和小孩子,基本上都可以正确的操作,而且该应用程序只要你能够打字,其他的操作都是非常简单。不过所有操作都是基于电脑上。 1.3.3 经济可行性主要是对项目的经济效益进行评价,本系统开发经费相对较少,在经济上是可以接受的,并且本系统实施后可以改变人们的联系方式,有助于更多的人去了解电脑,使得电脑全国化。现在,计算机的价格已经十分低廉,性能却有了长足的进步,普及率越来越高,参与的人也将越来越多,系统的市场潜力巨大,主要表现有以下几个方面:第一,现在能操作电脑的都会是用过聊天工具的用户;第二,网络在国内的普及力越来越高;第三,现在电脑越来越普及,直接促使硬件上成熟第四,系统投入少,回报快等等。所以,本系统在经济上是可行的。1.3.4 运行可行性本系统经过精心设计开发,比较紧凑,项目比较小,所以对软硬的要求并不高,运行投入也相对较少,现在普通的电脑都能够满足条件,因此,本系统在运行上是可行的。系统运行环境:为了保证系统运行的效率和可靠性,对软硬件配置有一定要求。此应用程序运行要求如下:(1)软件环境:操作系统:Windows2000/XP,Internet Explorer(IE),Internet Information Server (IIS)4.0及其以上版本;或者Windows98,Personal Web Server(PWS),IE等。数据库:采用Access (2)硬件环境: PU: PII 以上,内存:128M以上 2系统开发环境和主要技术简介2.1 Visual C++概述2.1.1 Visual C++的简介  VC基于C,C++语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在 Windows平台无所不能
2.1.2 Visual C++的发展过程  从20世纪70年代第一次提出面向对象的概念开始,到现在面向对象技术发展成为一种比较成熟的编程思想,通过面向对象技术,可以将现实世界直接影射到对象空间,从而为系统的设计和开发带来革命性的影响。Visual C++是一个典型的面向对象程序的设计语言,它也是目前为止功能最强、最受欢迎、应用最广泛、高效的Windows应用程序开发工具,它是在C 语言基础之上发展起来的,是C语言的超集。
2.1.3 Visual C++的特点Visual C++是功能最为强大可视化开发工具,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。因此Visual C++又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。     Visual C++具有的优点:提供了面向对象的应用程序框架MFC(Microsoft Foundation Class),简化了程序员的编程工作,提高了模块的可重用性;提供了基于CASE技术的可视化软件的自动生成和维护工具AppWizard、ClassWizard、Visual Studio、WizardBar等,实现了直观、可视的程序设计风格,方便地编和管理各种类,维护程序的源代码;封装了Windows的API函数、USER、KERNEL、GDI函数,简化了编程时创建、维护窗口的许多复杂的工作。2.1.4 MFC和Visual C++ MFC是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数,vc++是微软公司开发的c/c++的集成开发环境,所谓集成开发环境,就是说利用它你可以编辑,编译,调试,而不是使用多种工具轮换操作,灵活性较大。有时人们说vc呢也指它的内部编译器,集成开发环境必须有一个编译器内核,要不有什么用,例如DevC++其中一个编译器内核就是gcc。 MFC除了是一个类库以外,还是一个框架,你应该试过,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的东西,2.2  ADO2.2.1 ADO基本常识 ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,提供了简单易用的访问各种数据资源(包括关系型和非关系型)。是相对比较新的数据库访问技术。2.2.2 ADO接口的工作原理 ADO连接数据库应用程序需要进行以下步骤:(1) 初始化COM库,利用预编译#import引入ADO库定义文件#import "D:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","EndOfFile") rename("BOF","FirstOfFile")#include "icrsint.h"
 
网络聊天系统源代码在应用程序的初始化函数中对COM库进行初始化。以下两种方法都可以,但是初始化是必须的,一定要记得加。BOOL CAdoTestApp::InitInstance(){ // 方法1 ::CoInitialize(NULL);/* 方法2if(!AfxOleInit()) {  AfxMessageBox("COM Error!");  return FALSE; }*/…..}(2)用Connection对象连接数据库   _ConnectionPtr m_pConnection; m_pConnection.CreateInstance(_uuidof(Connection)); m_ pConnection ->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = D:\\Documents and Settings\\y\\My Documents\\student.mdb;","","",-1);其中_ConnectionPtr是一个接口,类似于ODBC中的CDatabase类,首先创建一个该接口,接着打开某个指定的数据源。也即是完成数据库的连接。跟_RecordsetPtr,_CommandPtr接口一起来执行任务。因使用方便,也有人把它跟叫做智能指针。(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。(4)使用完毕后关闭连接释放对象。
 
 
 
 
2.3 MFC Socket编程 2.3.1 MFC Socket编程机制   :
服务器端 客户端创建套接字s1=socket(…)将本地地址与s1相连接bind(s1,…)监听来自客户方的连接listen(s1,…)接受连接,并且得到新的套接字s2s2=accept(s1,…) 建立连接 建立套接字s=socket(…)将套接字和服务器端主机连接connect(s,…)在套接字s2上读写数据,直到数据交换完recv(s2,…) send(s2,…)关闭套接字s2 colsesocket(s2)关闭套接字s1 closesocket(s1) 传输数据 在套接字上读写数据,直到数据交换完。Send(s1….)recv(s1,…)关闭套接字s closesocket().
2.3.2 CSocket类编程模型
 
CSockect的继承关系:
 
 
 
 
 
 
 
 
 
MFC对CSockect的封装采用如下步骤:
服务器 客户端//构造一个CSockect对象sockectCSockect sockSrvr; //构造一个CSockect对象sockectCSockect sockClient;//生成sockectsockSrvr.Create(nPort); //生成sockectsockClient.Create();//进行监听sockSrvr.Listen();  //实现链接sockClient.Connect(strAddr,nPort)//构造新的sockectsockSrvr.Accept(sockRecv); //构造文件对象CSockFile file(&sockRecv); //构造文件对象CSockFile file(&sockClient);//构造CArchive对象CArchive.arIn(&file, CArchive::load) //构造CArchive对象CArchive.arIn(&file, CArchive::load)//使用CArchive传送数据arIn>>dwValue; //使用CArchive传送数据arIn>>dwValue;3系统总体设计 3.1 需求分析 “沟通无极限”,这句移动通讯的广告语其实更适合即时聊天。即时聊天使亲友的沟通突破时空极限,使办公室的沟通突破上下级极限,使陌生人的沟通突破环境极限,使自我与外界的沟通突破心理极限……作为使用频率最高的网络软件,即时聊天已经突破了作为技术工具的极限,被认为是现代交流方式的象征,并构建起一种新的社会关系。它是迄今为止对人类社会生活改变最为深刻的一种网络新形态,没有极限的沟通将带来没有极限的生活。互联网诞生于传统的电话网络,通讯交流可以说是互联网天然的应用之一。电子邮件就是最重要的通讯交流工具,是互联网最早的“杀手级应用”。此后兴起的网络论坛和网络聊天室都是网络聊天的前身。虽电子邮件有不可以取代的因素,但即时聊天系统更加适合局域范围内,更能及时有效的传递信息。3.2 功能概述 1).可以多人同时以文字的方式在线聊天;2).客户进入本系统必须注册,系统要保存每一个注册的帐号和口令。3).聊天室内的聊天信息对于本室的所有客户可见,同时也可以设置私聊,信息只有交谈双方知道4).退出系统时,用户名从在线用户列表中删除,并同时在各终端中显现。5).系统对用户可以管理(删除,修改权限)。3.3 运行环境a. 系统软件:Windows NT;Windows XP;b. 编译软件:Visual C++6.0;c. 数据库:Access3.4 系统总体方案设计         图 系统总体方案设计(Graph 4-1-1 Overall System Design)
 
网络聊天系统源代码3.5数据字典3.5.1.user_info -----用户基本信息表
表名 user_info列名 数据类型(精度范围) 空/非空 约束条件用户名 文本 非空 密码 文本 非空 安全问题 文本  安全问题答案 文本  3.5.2 manager-----管理员信息
表名 manager列名 数据类型(精度范围) 空/非空 约束条件用户名 文本 非空 密码 文本 非空 补充说明 仅用来保存服务器端管理员信息,只能直接在数据库中添加 4 系统详细设计 4.1服务器详细设计4.1.1服务器结构设计
                 图 4-1-1   服务器结构         (Graph 4-1-1 Server Architecture)
4.1.2服务器实现原理及功能描述   可以同时和多个客户端相连,并能和每个客户端之间进行数据的传输;可以显示所有的用户所发送的消息并将其显示出来;能接收客户端发来的信息,而且还要根据客户机的状态及时发布一些信息;将接收的某一客户机的信息,发送给所有其他客户端程序,实现聊天室的信息同步4.1.3 类设计  CaboutDlg、CChatSysServerApp、CChatSysServerDlg、CManagePage、CP2PData、CRoomInfo、CUserDlg、CUserSocket
4.1.4 服务器界面设计及主要实现代码
登陆界面  
登陆流程图                  图  4-1-4服务器管理员登陆            (Graph 4-1-4 Server Administrator Landing)
主要实现原理:    通过核对存放于数据库的用户信息来确认是不是合法用户,从而达到安全性
实现代码:BOOL CChatSysServerDlg::OnInitDialog(){ // Set the icon for this dialog.  The framework does this automatically //  when the application's main window is not a dialog SetIcon(m_hIcon, TRUE);   // Set big icon SetIcon(m_hIcon, FALSE);  // Set small icon  // TODO: Add extra initialization here
 //打开数据库 m_pConnection.CreateInstance(_uuidof(Connection)); m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=chatsystem.mdb;","","", -1); //打开记录集 m_pRecordset.CreateInstance(_uuidof(Recordset)); m_pRecordset->Open("select * from manager",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
// GetDlgItem(IDC_USNAME)->SetFocus();    m_MgName = "cs001"; m_MgPasswd = "123456"; UpdateData(FALSE); return TRUE;  // return TRUE  unless you set the focus to a control}
// The system calls this to obtain the cursor to display while the user drags//  the minimized window.HCURSOR CChatSysServerDlg::OnQueryDragIcon(){lwfree.cn}//登陆判断函数void CChatSysServerDlg::OnLogin() { // TODO: Add your control notification handler code here UpdateData(TRUE); //判断用户名和密码是否为空 if (m_MgName == "" ||m_MgPasswd =="") {  MessageBox("用户名或者密码不能为空!", "提示", MB_ICONWARNING |MB_OK);  GetDlgItem(IDC_USNAME)->SetFocus();  return; } //移动第一条记录 m_pRecordset->MoveFirst();
 
VC++网络聊天系统while (!m_pRecordset->EndOfFile) {  //读用户名  vFieldValue = m_pRecordset->GetCollect("用户名");  strFieldValue = (char*)_bstr_t(vFieldValue);  //判断用户名是否正确  if (strcmp(strFieldValue, m_MgName) == 0)  {   //读密码,判断密码是否正确,如果正确则显示管理页面   vFieldValue = m_pRecordset->GetCollect("密码");   strFieldValue = (char*)_bstr_t(vFieldValue);   if (strcmp(strFieldValue, m_MgPasswd) == 0)   {    CManagePage dlg;    OnCancel();    dlg.DoModal();    break;   }   //否则提示错误   else   {    MessageBox("密码错误!", "提示", MB_ICONWARNING |MB_OK);    m_MgPasswd = "";    GetDlgItem(IDC_PASSWD)->SetFocus();    return;   }  }  m_pRecordset->MoveNext(); } }
查看用户界面实现代码:UINT RecvThread(LPVOID sock){ BOOL IsRun = TRUE; SOCKET mySocket; mySocket = (SOCKET)sock;
 POSITION pos; POSITION pos2; CP2PData temp; CUserSocket usersocket; CUserSocket tempsock; CRoomInfo   roominfo; int   listcount;
 while(IsRun) {  int n_recv;  char RecvBuffer[1024];  //接收用户消息  n_recv = ::recv(mySocket, RecvBuffer, sizeof(RecvBuffer), 0);  if (n_recv > 0)  {   //分割消息,取出标志位   RecvBuffer[n_recv] = '\0';      int i = 0;   char flag[20];   char *pbuffer = RecvBuffer;   while(*pbuffer != '\0')   {    if(*pbuffer == '~')     break;    flag[i] = *pbuffer;    i++, pbuffer++;   }   flag[i] = '\0';   pbuffer++;   //用户退出消息处理   if (strcmp(flag, "USER_QUIT") == 0)   {    //查找用户结点    pos = SocketList.GetHeadPosition();    listcount = SocketList.GetCount();    for(int j=0; j 
网络聊天系统源代码 for(j=0; j     pos = SocketList.GetHeadPosition();     for (j=0; j pos = RoomList.GetHeadPosition(); listcount = RoomList.GetCount();
 for (int i=0; i 客户端聊天室流程图  图4-2-2 创建聊天室          ( Graph 4-2-2 Chat room basic information)4.2.2客户端实现原理及功能描述注册好的帐号通过登陆界面登陆到用户主界面,主要是聊天室基本信息的文字聊天和管理等。(1) 创建聊天室 A. 可以添加新的聊天室;B. 可以删除自己创建的聊天室;(2) 加入聊天室A. 可以在大厅里看到别人创建的聊天室,然后加入他们的聊天室;(3) 多人文字聊天A. 可以在聊天室的所有人进行聊天。(4) 聊天信息纪录管理A. 可以把对所有人的对话保存在电脑的硬盘上;
 
客户端功能模块的设计与开发B. 可以把你对别人说的或别人对你说的悄悄话保存在电脑的硬盘上。(5) 聊天室内私聊A. 具有对别人进行悄悄话。(6) 其他信息管理A. 可以进行清屏操作;B. 房主可以进行踢除其他人操作,可以刷新新进来的帐号名
4.2.3 客户端界面设计及主要实现代码   登陆界面
void CChatSystemDlg::OnLogin() { // TODO: Add your control notification handler code here //初始化网络 NetInit();  char ClientBuffer[1024]; char ReceiveBuffer[200]; int i_recv, i, err; UpdateData(TRUE); //连接至目的主机 err = connect(ClientSocket, (sockaddr *)&m_ClientSockAddr, sizeof(m_ClientSockAddr)); if(err ==SOCKET_ERROR) {  closesocket(ClientSocket);  MessageBox(_T("服务器连接失败!"), _T("聊天系统"),   MB_ICONINFORMATION);  return; } //将用户名和密码封装并发送到服务器进行验证 sprintf(ClientBuffer, "USER_LOGIN~%s,%s\0", m_Username, m_Password); i = send(ClientSocket, ClientBuffer,strlen(ClientBuffer) + 1, 0); if (i <= 0) {  MessageBox("发送错误!", "聊天系统", MB_ICONERROR|MB_OK);  return; } //接收验证结果 i_recv = recv(ClientSocket, ReceiveBuffer, sizeof(ReceiveBuffer),0); if (i_recv > 0) {  ReceiveBuffer[i_recv] = '\0';  //如果验证成功,保存用户名并显示用户主界面  if (strcmp(ReceiveBuffer, "success") == 0)  {   Session.Format("%s", m_Username);   CUserDlg dlg;   OnCancel();   dlg.DoModal();  }  //否则显示服务器消息  else  {   MessageBox(ReceiveBuffer, _T("聊天系统"), MB_OK | MB_ICONINFORMATION);  } } }注册号码 
} lwfree.cn{ // TODO: Add your control notification handler code here  char regBuffer[1024]; char regRecvBuffer[200]; CChatSystemDlg *pDlg = NULL; 
 UpdateData(TRUE); //检查用户名和密码是否为空 if (m_UsNameNew.IsEmpty()) {  MessageBox("用户名不能为空!", "聊天系统", MB_OK | MB_ICONINFORMATION);  GetDlgItem(IDC_USNAME_NEW)->SetFocus();  return; } if (m_PasswdNew.IsEmpty()) {  MessageBox("密码不能为空!", "聊天系统", MB_OK | MB_ICONINFORMATION);  GetDlgItem(IDC_PASSWD_NEW)->SetFocus();  return; } pDlg = (CChatSystemDlg *)AfxGetApp()->m_pMainWnd; regsock = pDlg->ClientSocket; //连接到目标主机 int err = connect(regsock, (sockaddr *)&(pDlg->m_ClientSockAddr), sizeof(pDlg->m_ClientSockAddr)); if(err ==SOCKET_ERROR) {  closesocket(regsock);  MessageBox(_T("服务器连接失败!"), _T("聊天系统"),MB_ICONINFORMATION);  return; } //填充要发送的字符串  sprintf(regBuffer, "USER_REGISTER~%s,%s,%s,%s\0",   m_UsNameNew, m_PasswdNew, m_SecurityNew, m_KeyNew); //发送到服务器,验证并返回消息 int isend = send(regsock, regBuffer, strlen(regBuffer) + 1, 0); if (isend <= 0) {  MessageBox("发送错误!", "聊天系统", MB_ICONERROR | MB_OK);  return; } isend = recv(regsock, regRecvBuffer, sizeof(regRecvBuffer), 0); if (isend > 0) {  regRecvBuffer[isend] = '\0';  if (strcmp(regRecvBuffer, "success") == 0)  {   MessageBox("注册成功!", "聊天系统", MB_ICONINFORMATION | MB_OK);   OnOK();  }  else  {   MessageBox(regRecvBuffer, "聊天系统", MB_ICONINFORMATION | MB_OK);   m_UsNameNew = "";   m_PasswdNew = "";   GetDlgItem(IDC_USNAME_NEW)->SetFocus();   UpdateData(FALSE);   return;  } }
 
网络聊天系统源代码//创建聊天室void CUserDlg::OnCreateRoom() { // TODO: Add your control notification handler code here if (m_IsInRoom) {  MessageBox("请先退出房间再创建!", "聊天系统", MB_ICONINFORMATION | MB_OK);lwfree.cn } CCreateRoomDlg dlg; dlg.DoModal();}//加入房间void CUserDlg::OnJoinRoom() { // TODO: Add your control notification handler code here if (m_IsInRoom) {  MessageBox("请先退出房间再加入!", "聊天系统", MB_ICONINFORMATION | MB_OK); } int m_Index; char sendbuffer[200]; CString SelectText; //取得要加入的聊天室名 m_Index = m_RoomList.GetCurSel();        m_RoomList.GetText(m_Index, SelectText); if (SelectText.IsEmpty()) {  MessageBox("你没有选中房间!", "聊天系统", MB_ICONINFORMATION |MB_OK);  return; } //封装信息并发送到服务器 sprintf(sendbuffer, "JOIN_ROOM~%s", SelectText); if (send(usersock, sendbuffer, strlen(sendbuffer) + 1, 0) <= 0) {  MessageBox("发送错误!", "聊天系统", MB_ICONERROR|MB_OK);  return; } //如果聊天室指针不为空先删除再分配,并显示 if (pChatRoomDlg != NULL) {  delete pChatRoomDlg;  pChatRoomDlg = NULL; } pChatRoomDlg = new CChatRoomDlg; pChatRoomDlg->TitleText = SelectText; pChatRoomDlg->m_IsCreator = FALSE; pChatRoomDlg->Create(); pChatRoomDlg->ShowWindow(SW_SHOW); //从服务器获取聊天室用户列表 int isend = send(usersock, "USER_LIST", strlen("USER_LIST") + 1, 0); if (isend <=0 ) {  MessageBox("发送失败!", "聊天系统", MB_ICONERROR|MB_OK);  return; } m_IsInRoom = TRUE;  UpdateWindow(); }
邀请私聊 //邀请私聊函数void CUserDlg::OnInviteTalk() { // TODO: Add your control notification handler code here int m_Index = -1; char sendbuffer[100]; CString m_DestUser; //取得选中的用户 m_Index = m_AllUser.GetCurSel(); if (m_Index == -1) {  MessageBox("你没有选中用户!", "聊天系统", MB_ICONINFORMATION | MB_OK);  return; } m_AllUser.GetText(m_Index, m_DestUser);  //封装信息,向服务器发送消息 CChatSystemDlg *pdlg = NULL; pdlg = (CChatSystemDlg *)AfxGetApp()->m_pMainWnd; if (strcmp(m_DestUser, pdlg->Session) == 0) {  MessageBox("不能向自己发送私聊请求!", "", MB_ICONINFORMATION | MB_OK);  return; } sprintf(sendbuffer, "INVITE_TALK~%s\0", m_DestUser); if (send(usersock, sendbuffer, strlen(sendbuffer) + 1, 0) <=0 ) {  MessageBox("发送失败!", "聊天系统", MB_OK | MB_ICONERROR);  return; }}
 
网络聊天系统源代码//邀请加入聊天室函数void CUserDlg::OnInviteJoin() { // TODO: Add your control notification handler code here int m_Index = -1; char sendbuffer[100]; CString m_DestUser; //取得用户名 m_Index = m_AllUser.GetCurSel(); if (m_Index == -1) {  MessageBox("你没有选中用户!", "聊天系统", MB_ICONINFORMATION | MB_OK);  return; } m_AllUser.GetText(m_Index, m_DestUser); //向服务器发送消息 sprintf(sendbuffer, "INVITE_JOIN~%s\0", m_DestUser); if (send(usersock, sendbuffer, strlen(sendbuffer) + 1, 0) <=0 ) {  MessageBox("发送失败!", "聊天系统", MB_OK | MB_ICONERROR);  return; } }刷新用户主界面//刷新函数
void CUserDlg::OnRefurbish() { // TODO: Add your control notification handler code here
 //删除控件中所有内容 m_RoomList.ResetContent(); m_AllUser.ResetContent(); //重新要求房间信息和在线用户信息 int  i = send(usersock, "ROOM_LIST", strlen("ROOM_LIST") + 1, 0); if ( i <= 0 ) {  MessageBox("发送失败!", "聊天系统", MB_ICONERROR|MB_OK);  return; }
退出聊天室} void CUserDlg::OnCancel() { // TODO: Add your control notification handler code here if (isRun) {  //如果接收线程还在运行,则发送用户退出消息  int i = send(usersock, "USER_QUIT", strlen("USER_QUIT") + 1, 0);  if (i <= 0)  {   MessageBox("发送失败!", "聊天系统", MB_OK|MB_ICONERROR);  } } //删除分配的空间 if (pChatRoomDlg != NULL) {  if (m_IsInRoom)  {   pChatRoomDlg->DestroyWindow();  }  delete pChatRoomDlg;  pChatRoomDlg = NULL; } if (pTalkRoomDlg != NULL) {  if (isTalking)  {   pTalkRoomDlg->DestroyWindow();  }  delete pTalkRoomDlg;  pTalkRoomDlg = NULL; } CDialog::OnCancel();}
 
网络聊天系统源代码5系统测试在系统设计编码完成之后,接下来的工作就是对整个系统的测试。软件测试是一项任务繁重的工作。据统计,开发较大规模的软件,40%以上的精力是耗费在测试上的。即使有经验的程序员也难免在编码中发生错误,若不及时排除,这些错误轻则会降低软件的可靠性与安全性,重则可导致整个系统的失败。本程序的测试是为了防患于未然,也是系统开发过程中必不可少的一步。软件测试中经常用到的是人工测试和机器测试。一般采用机器测试黑白盒结合的方法。系统开发人员对被测试程序的内部结构十分清楚,他们从程序的逻辑结构入手设计测试数据,所以测试初期以专业人员进行的白盒测试为主。而黑盒测试主要用于系统测试后期,由于不用关心被测试程序的内部结构,设计测试范例时,仅以程序的外部功能为根据而不必考虑其他因素。此程序经过了一些同学的黑白盒测试。他们一方面检查程序能否实现一切应具备的功能,另一方面又考查了能否拒绝一切不合法的行为。管理员正确登陆之后,能进行查询,删除操作。界面都简单明了,只要点击按钮系统自动调出数据。当数据冲突或出错时,通常重启系统可以使数据库得到恢复。这些功能都基本通过了测试
5.1聊天系统的总体设计目标服务器端的总体设计目标:(1)要求可以同时和多个客户端相连,并能和每个客户端之间进行数据的传输;(2)可以统计在线用户的个数和所有的用户所发送的消息的总数目,并将其显             示出来(3)能接收客户端发来的信息,并将他显示在一个消息列表框里,而且还要根据客户机的状态及时发布一些信息,如客户机的进入和离开等;(4)将接收的某一客户机的信息,发送给所有其他客户端程序,实现聊天室的信息同步。
5.2客户端的总体设计目标:(1)可以和聊天室服务器完成连接,并能够进行数据的发送和接收工作;(2)通过改变连接请求的端口号和服务器名称,可以和不同的聊天室服务器相连接,但一次只能和一个服务器相连接;(3)可以接受用户的输入,并将信息加上一定的标识,表明信息的来源;(4)对一些系统事件,如客户机离开聊天室,也应该发送系统事件,通知服务器;接收服务器发送同步的消息,并将该消息显示在一个列表5.3测试结果测试用例名称 测试结果 缺陷严重程度测试用户注册功能 用户名与密码都能正确注册 无缺陷测试登陆功能 能够辨认用户身份和权限 无缺陷测试服务器创建功能和稳定性 能够创建服务器并比较稳定 无缺陷测试删除聊天室功能 能够实现删除用户并在客户端提示 无缺陷测试删除用户功能 能够删除用户并在客户端提示 无缺陷测试服务器显示在线用户 可以看到在线用户 无缺陷测试客户端登陆 客户端可以进行登陆 无缺陷测试客户端注册 客户端可以进行注册并可用 无缺陷测试客户端聊天室显示功能 可以看到系统已有的和用户创建的房间 无缺陷测试客户端显示所有用户 可以正常显示所有在线用户 无缺陷测试邀请私聊功能 可以实现邀请(Debug) 无缺陷测试邀请加入聊天室功能 可以实现邀请加入聊天室(Debug) 无缺陷测试客户端用户显示功能 同一聊天室的可以看到其他的用户 不严重测试客户端信息收发功能 用户登陆客户端可以进行信息收发 无缺陷测试客户端密语功能 可以实现悄悄话聊天 无缺陷测试客户端清屏功能 可以完成清屏功能 无缺陷测试客户端房主踢人功能 可以实现踢人功能 无缺陷测试客户端登入多个实例 可以开多个客户端并进行聊天 无缺陷测试群聊功能 可以成功进行本房间内群聊 无缺陷测试创建与退出房间功能 可以成功进行进出房间 无缺陷测试客户端登陆同一账号 不可以登陆,提示用户已经登陆 无缺陷测试创建房间功能 可以创建,并显示 无缺陷测试加入房间功能 可以进入房间,并进行聊天 无缺陷测试客户端查看聊天记录 可以正确查看聊天记录 无缺陷测试客户端保存聊天记录 可以正确保存聊天记录到本地 无缺陷测试用户找回密码功能 可以正确取回密码 无缺陷测试服务器端登陆功能 可以正确登陆 无缺陷6设计心得通过,独立完成服务客户端的设计,充分检验了过去所学的专业知识,同时,积累了丰富的软件开发的经验,对软件开发有了更深刻的理解。6.1 需求分析与系统设计阶段心得任何的系统设计都离不开系统分析,系统分析是软件设计过程中必不可少的一个阶段。需求分析寄托设用户的期望,设计者的工作要求,正确、完善的需求分析,可以大大降低系统的风险,提高系统的开发效率.在设计过程中,我们深知这一点,发动大量的同学参与其中,使系统的功能尽可能的满足客户的需求。系统设计的重要性不言而喻,它是整个设计过程中最重要的一个环节,它是构架合理、正确的系统框架必不可少的一个阶段,些系统中,我们采用了数据库优化技术,改善了系统的运行性能;但是,对系统的整体结构产生了一段的影响。正如上面提到的那样,深入需求分析,加上模块的系统设计,还有老师同学的帮助,使问题很快就得到了解决。6.2 测试阶段心得软件的测试,是软件稳定性和安全性的保证。由于设计之初,就充分认识到,测试的重要性,所有,在设计的每个阶段,我们都进行了认真的单元测试,功能测试。虽然,在测试过程中遇到了不少的问题,但是,通过认真的排查、收集资料、寻求老师同学帮助,最终把问题扫除。系统设计后期,出现了一些问题,不过,由于在单元测试过程中,积累了丰富的经验,问题很快就被解决。测试是个对经验依赖很强的一门技术,只要不断的实践与连续,才能有效的提高测试能力。6.3统实施和维护阶段心得系统测试和系统设计是同步的,下面是我的一些经验教训。首先,我们可以通过客户端对其测试,如果运行没有问题的话,就会有聊天室出现。但是,如果代码出现哪怕很细小的错误,客户端运行都不会顺利,而且因为编程时很枯燥的,万一碰到我们一时难以解决的问题会更加缺乏信心,这时我们应该跟同学多多交流在编程过中的遇到的问题。另外,我们要时刻备份系统,避免我们的误操作造成对系统的破坏,如果我们没有备份,以前所做的努力就全部付之东流了。所以,这一点非常重要
结束语经过一个月连续奋战,终于圆满的完成了整个设计过程。在设计实现中,碰到了些困难,但最终还是找到了解决问题的出口;在实现过程中,增强了动手能力,积累了丰富的设计经验,提高了团队合作意识,对工业化软件生产有了更深刻的认识,同时,能通过自己的所学来创造价值,大大增强了自信心。
在设计过程中,考虑到系统的实用性,邀请了软件学院的同学和其他各系的朋友、同学参与到系统的设计过程中来,他们不但需求分析,还对系统的整体设计提出了非常有价值的改进意见,使系统的使用性的到明显的提升;同时,参与系统的测试,很大程度上,提高了系统的可靠性。
此系统经过一段的实际运作,虽然出现了一些bugs,现都已经排除,系统没有出现明显的安全问题、性能问题.基本能满足聊天者的使用。致  谢在聊天室的设计与开发过程中,我得到了很多老师和同学的帮助,系统开发是一个美好的过程,带来了很多收获。接触了真正软件开发过程,感受了团队合作的快乐;同时,治学严谨而不失亲切的老师,互相帮助的同学,他们给我的不仅只是帮助,更好人生真理。借此论文之际,我想向所有人表示我的谢意。在这感谢指导老师,本论文是在韩向党老师的指导下修改完成的。在此,要对他的细心帮助和指导表示由衷的感谢。这段时间里,我从他身上不仅学到了许多的专业知识,更感受到了他工作中的严谨教学态度,生活中的平易近人。此外,他严谨的治学态度和高瞻远瞩值得我去学习。还有就是给了我许多做人的道理,使我在以后的生活能够更好的度过,还有就是他让我们知道在做项目时,团队精神的重要性。感谢我同组的同学,他们在整个测试过程中提出了许多建设性意见,并给我解决了一些专业性问题。感谢四年来传授我知识的老师们,更要感谢我的家人对我学业上的支持和鼓励,感谢所有关心帮助过我的人。
 
网络聊天系统源代码参考文献[1]   侯俊杰 深入浅出MFC(第二版) 华中科技大学出版社  2001-01[2]   王燕 《面向对象的理论与c++实践》 清华大学出版社 1996 [3]   李师贤、李文军、周晓聪等 《面向对象程序设计基础》 高等教育出版社 2005.3[4]   孙鑫、余安萍 《VC++ 深入详解》 电子工业出版社 2006.4[5]   张虹 《软件工程与软件开发工具》 清华大学出版社 2004.9[6]   汪翔、袁辉 《visual c++实践与提高 网络编程篇》 中国铁路出版2001[7]   赵松涛 《ACCESS Server 2000应用与实例集锦》 人民邮电出版社 1999[8]   姚领田《精通MFC程序设计》 人民邮电出版社    2006[9]   胡绪英、李梓 《ACCESS2002数据库技术及应用》 科学出版社 2003.8[10]   清汗计算机工作室 《Visual C++6.0数据库与网络开发实例》 机械工业出版社 2001[11]  Kate Gregory 《Visual c++6开发使用手册》 机械工业出版社 1999[12]  吕昕 《Visual C++6.0编程实例与技巧》 中国水利水电出版社 1999[13]  旺晓平 《Visual C++网络通信协议分析与应用实现》 人民邮电出版社 2003[14]  陈元琰、邓宗明、张睿哲等 《Visual C++6.0编程使用技术与案例》 清华大学出版社 2001[15]http://www.lwfree.cn
 
文献综述      题  目:网络聊天系统                  ——服务器客户端开发英文题:Internet Chat System                     ——The Development Of Information Client Module《网络聊天系统的客户端模块的设计与开发》文献综述【摘要】现今在软件开发中开发工具形形色色,如VB,VC++, Delphi等,以及为软件需要提供数据存储的数据库(ACCESS,MY SERVER,SQL SERVER,ORACLE),并且在当今Internet技术的迅速发展的年代,网络技术和编程越来越受到人们的重视.因此在这种环境下,一种网络聊天工具可以使人的距离越拉越近.所以我们根据这个情况开发出了网络聊天系统.
【关键词】聊天室,C/S架构,TCP/IP,套接字,多线程,ACCESS  
Abstract:    Now in software development in the various development tools, such as VB, C / C + +, Delphi, as well as the need to provide software for data storage database (ACCESS, MY SERVER, SQL SERVER, ORACLE), in today's Internet technology and the rapid development of the , Network technology and programming more and more people's attention. So in this environment, an Internet chat tools can make the widening gap between the more recent. Under this situation so we developed a network chat system.
keyword:chatrooms;C/S architecture;TCP/IP;SOCKET;multi-threaded;ACCESS;
1 VC++ ,MFC,ACCESS介绍1.1 VC++VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用c++的一个开发平台.有些软件就是这个编出来的...另外还有VB,VF.只是使用不同语言...但是,vc++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。它的特点主要是:VC++综合了很多组件,能提供编程所需要的开发环境. 著缩短开发时间的,您可以享受到一种全新水平的工作效率。编码所费的时间减少了,编译所费的时间减少了,调试所费的时间也减少了,一句话,创建应用程序所费的时间减少了,同时还可以享受到更多的构件重用。1.1.1VC++给人的第一感觉便是专业化,高深VC++从1.5版到现在的6.0版,还没有出现过像VB一样的中文版。VC++在中文平台下可以使用中文,但编译后那些按钮上的、对话框上的中文都成ASCII码了。何故?因为VC++在安装时是默认按单词节字符安装的,而中文字符是双字节编。vc++是Windows平台上的C++编程环境VC需要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。1.1.2.面向对象( Object-oriented )的定义与优势面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法; 以认识论为基础,用对象来理解和分析问题空间,并设计和开发出由对象构成的软件系统(解空间)的方法。 由于问题空间和解空间都是由对象组成的,这样可以消除由于问题空间和求解空间结构上的不一致带来的问题。简言之,面向对象就是面向事情本身,面向对象的分析过程就是认识客观世界的过程。 面向对象方法的主要优点是:符合人们通常的思维方式;从分析到设计再到编码采用一致的模型表示具有高度连续性;软件重用性好。1.1.3类类(Class)是具有相同属性和服务的若干对象的集合。类是C++封装的基本单元,它把数据和函数封装在一起。类为类的所有对象提供一种统一的抽象描述。面向对象的方法不仅支持过程抽象,而且支持数据抽象,类实际上就是一种抽象数据类型,它对外开放的公共接口构成了类的规格说明,这种接口规定了外界可以使用的合法的操作符,利用这些操作符可以对类实例中包含的数据进行操作。使用这无需指导这些符号的实现算法和类中的数据元素的具体表示方法,就可以通过这些操作符使用类中定义的数据通常把这类对象成为规格说明抽象。在不同的层次上运用抽象的原则,可以获得基类和它的派生类。一个类中包含有属性和服务两部分。实际上,类是一种类型,这种类型是自定义的,而对象是某个类的一个实例。1.1.4.继承继承是面向对象语言提供的一个重要机制,它支持层次分类的观点。继承使得程序员可以在一个较通用类的基础上很快地建立起一个新类,而不必从头设计每个类。在类的继承关系中,被继承的类称为基类,继承的类称为派生类。而派生类继承了基类中的属性和服务,这将简化系统的构造过程和文档,实现了共享。1.1.5.消息传送信息是向对象发出的服务请求,信息的发送者是一个要求提供服务的对象,而信息的接收者是一个能够提供服务的对象,通过消息传送实现了对象之间的通信。 1.2 MFCMFC是一个编程框架,MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。1.2.1. 封装构成MFC框架的是MFC类库。MFC类库是C++类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。(1)对Win32应用程序编程接口的封装用一个C++ Object来包装一个Windows Object。例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。1.2.2.继承首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CObject和CCmdTarget。CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通
 
网络聊天系统源代码过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。1.2.3.虚拟函数和动态约束 MFC以“C++”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。本书将充分的展示MFC调用虚拟函数和消息处理函数的内幕,让读者对MFC的编程接口有清晰的理解。1.3 AccessAccess是一个数据库管理系统,它之所以被集成到Office中而不是Visual   Studio中,是因为它与其它的数据库管理系统(如Visual FoxPro)相比更加简单易学,一个普通的计算机用户即可掌握并使用它。而且最重要的一点是, Access的功能足够强大,足以应付一般的数据管理及处理需要。Access可以实现建立数据库、报表,以及对数据库、报表的修改、查询等功能。Access简要技术特点:1、Access是 Microsoft Office 的一个组件,一个前后台结合的数据库“软件”。 2、Access不是一种存储格式,是一种软件3、Access 中的一些对象可以被 VB 调用,但是必须在调用的机器上安装 ACCESS 这个软件(COPY一个MDB文件是不够的)或者安装额外的 ActiveX 控件4、这里指的纯 ACCESS 环境就是指没有使用任何其他软件,直接使用 ACCESS 界面以及存储格式的环境,也就是不能脱离 ACCESS 运行时的环境。上面说的 ASP + MDB / VB + MDB 等等都不是所谓的“纯 ACCESS 环境”5、MDB 是一种文件格式,其中的数据以特定方式组织起来,而 ACCESS 这种软件的默认存储格式正好是 MDB 6、ACCESS 这个软件本身就具有开发者使用的界面和适合于“最终用户”的界面,也就是我们通常说的前后台结合。2 相关技术和工具比较2.1VC和VB两者的比较: 1)两者的设计出发点不一样.vc更注重程序的效率,而vb则强调易用性 2)VC为编译型,编译后得到的程序可直接运行。VB为解释型,编译后得到的文件需要在VB环境里解释执行,执行情况类似于VB Script这样的脚本语言。3)两者对对象的支持程度不一样.vc是面向对象的,而vb则是基于对象的。因为vb只有封装的特性,却不支持继承和多态.2.2 ACCESS、SQL Server与Oracle数据库的比较2.2.1开放性SQL Server、ACCESS只能在windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据量的关键业务时。Oracle:能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。2.2.2安全性ACCESS:没有获得任何安全证书,密码保护比较弱。SQL server:没有获得任何安全证书。Oracle Server:获得最高认证级别的ISO标准认证。2.2.3性能ACCESS:多用户,大数据时性能不佳。SQL Server:多用户时性能不佳。Oracle:性能最高, 保持windowsNT下的TPC-D和TPC-C的世界记录。2.2.4客户端支持及应用模式ACCESS:B/S结构、C/S结构,支持windows客户端与服务器,可以用ADO,DAO,OLEDB,ODBC连接。SQL Server:B/S结构、C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB,ODBC连接。Oracle:多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接。2.2.5操作简便 ACCESS:操作简单。       SQL Server:操作简单,但只有图形界面。Oracle:较复杂, 同时提供GUI和命令行,在windowsNT和unix下操作相同。
3 Win Socket网络编程前创建一个新的套接字格式:SOCKET PASCAL FAR socket(int af,int type,int procotol);参数:af: 通信发生的区域type: 要建立的套接字类型procotol: 使用的特定协议
2、指定本地地址——bind()功能:将套接字地址与所创建的套接字号联系起来。格式:int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen);参数:s: 是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。其它:没有错误,bind()返回0,否则SOCKET_ERROR地址结构说明: struct sockaddr_in{short sin_family;//AF_INETu_short sin_port;//16位端口号,网络字节顺序struct in_addr sin_addr;//32位IP地址,网络字节顺序char sin_zero[8];//保留}
3、建立套接字连接——connect()和accept()功能:共同完成连接工作格式:int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen); SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR * name,int FAR * addrlen);
参数:同上
 
VC++网络聊天系统4、监听连接——listen()功能:用于面向连接服务器,表明它愿意接收连接。格式:int PASCAL FAR listen(SOCKET s, int backlog); 5、数据传输——send()与recv()功能:数据的发送与接收格式:int PASCAL FAR send(SOCKET s,const char FAR * buf,int len,int flags); int PASCAL FAR recv(SOCKET s,const char FAR * buf,int len,int flags);参数:buf:指向存有传输数据的缓冲区的指针。 6、多路复用——select()功能:用来检测一个或多个套接字状态。格式:int PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds, fd_set FAR * exceptfds,const struct timeval FAR * timeout);参数:readfds:指向要做读检测的指针writefds:指向要做写检测的指针exceptfds:指向要检测是否出错的指针timeout:最大等待时间7、关闭套接字——closesocket()功能:关闭套接字s格式:BOOL PASCAL FAR closesocket(SOCKET s);3.1 TCP/IP 协议协议介绍TCP/IP传输控制协议/网际协议是业界标准的协议组。它是基于四层参考模型,属于TCP/IP协议组的所有协议都位于该模型的上面三层。TCP/IP模型的每一层对应于国际标准化组织(ISO)提议的七层“开放系统互联(OSI)”参考模型的一层或者多层。
OSI参考模型            TCP/IP模型
                                       TCP/IP协议组                              TCP/IP协议组
 
 
 
 
 
 
 
使用下表描述每一层所提供的服务以及所使用的协议:
层 描述 协议应用层 定义了TCP/IP应用协议以及主机程序与要使用网络的传输层服务之间的接口 HTTP,Telnet,FTP ,TFTP SNMP, DNS ,SMTP等传输层 提供主机之间的通讯会话管理,定义传输数据时的服务级别以及连接状态 TCP ,UDP ,RTP网络层 将数据装入IP数据包,包括用于在主机间以及经过网络转发数据包时所用的源和目标地址信息。实现IP数据包的路由 IP ,ICMP ,ARP ,RARP网络接口层 指定如何通过网络物理地发送数据,包括直接与网络媒体直接接触的硬件设备如何将比特流转换为电信号 以太网\帧中继\令牌环了解TCP/IP核心协议:1地址解析协议(ARP):实现IP地址到物理地址的转换;2 网际协议(IP):是无连接的、不可靠的数据报协议,主要负责主机之间的寻址和选择数据包的路由;3网际消息协议(ICMP):通过ICMP,使用IP通信的主机和路由器可以报告错误并交换受限控制和状态信息;4用户数据报协议(UDP):在主机之间提供轻便、快捷、不可靠地传输数据;5 传输控制协议(TCP):提供可靠的、面向连接的数据报传递服务。
UDP/ TCP比较:UDP TCP无连接的服务:在主机间不建立会话 面向连接的服务:在主机间建立会话UDP不能确保或承认数据传递或序列化数据 TCP通过确认和按照顺序传递数据来确保数据的传递使用UDP的程序负责提供数据传递的可靠性 TCP确保数据的可靠传输UDP非常快,具有低开销要求,支持点对点或者一点对多点的通信 TCP比较慢,具有更高的开销要求,只支持点对点通信。
4面向网络聊天系统的系统建设主体思路为了能够更好的满足用户的需要,如局域网聊天,不同区域的人聊天等;为了使制作出来的软件更加人性化,更加容易上手。为了实现这个目标因此,在软件设计过程中,为了做好系统规划,我觉得应该主要这从五个方面下手: 1、实用性。详细了解使用网络聊天系统客户需求,使的产品更加符合他们的使用。2、科学性。采用先进的设计思路规划网站,使得程序更加可靠,安全。 3、安全性。采用可靠的安全技术标准TCP/IP传送,确保信息的安全传送。4、可扩展性。可以根据网络聊天系统的发展趋势,即时对系统功能的增加,对原有系统进行功能扩展。 5、交互性。开发高效的交互功能,使用户之间实现及时有效的沟通。
总结    在开发网络通讯软件的时候,我们不仅需要体现技术上,而且要把这个软件的完美,就需要我们不断的学习新的知识,把新的知识融合到软件开发中去,这样做出来的软件才能得到别人的认可和欣赏. 最后感谢老师们的认真的讲解和耐心的帮助。
 
VC++网络聊天系统六、用户操作手册
1.引言 11.1编写目的 11.2项目背景 21.3定义 21.4参考资料 22.软件概述 22.1目标 22.2功能 22.3性能 23.运行环境 23.1硬件 23.2支持软件 34.使用说明 34.1安装和初始化 34.2输入 34.3输出 34.4出错和恢复 34.5求助查询 35.运行说明 35.1运行表 35.2运行步骤 36.非常规过程 37.操作命令一览表 38.程序文件(或命令文件)和数据文件一览表 39.用户操作举例 3
1.引言1.1编写目的本用户手册供该软件的用户查阅,方便用户使用该软件。
1.2项目背景该软件是ITjob培训中心布置的团队项目,各成员按模块进行任务分配1.3定义列出手册中所用到的专门术语的定义和缩写词的原文。1.4参考资料【列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括: a. 项目的计划任务书、合同或批文;b. 项目开发计划;c. 需求规格说明书;d. 概要设计说明书;e. 详细设计说明书;f. 测试计划;g. 手册中引用的其他资料、采用的软件工程标准或软件工程规范。】2.软件概述2.1目标一个基于网络的即时通讯软件,以方便公司内部员工之间,朋友之间的安全交流。用本系统登陆的用户可以向已经上线的用户发送文件框里的文字消息,用于局部人群聊天。在线用户可以创建一个新房间,也可以加入原有房间中任意一个房间。2.2功能1.可以多人同时以文字的方式在线聊天;2.客户进入本系统必须注册,系统要保存每一个注册的帐号和口令。3.聊天室内的聊天信息对于本室的所有客户可见4.退出系统时,用户名从在线用户列表中删除,并同时在各终端中显现。5.系统对用户可以管理(删除,修改权限)。2.3性能
3.运行环境3.1硬件【列出软件系统运行时所需的硬件最小配置,如a. 计算机型号、主存容量;b. 外存储器、媒体、记录格式、设备型号及数量;c. 输入、输出设备;d. 数据传输设备及数据转换设备的型号及数量。】3.2支持软件a. 系统软件:Windows NT;Windows XP;b. 编译软件:Visual C++6.0;c. 数据库:Access4.使用说明服务器端:    1.软件运行后,输入管理员帐号密码,点击登陆,如果密码正确,则会显示管理主页面。2.在管理页面上,点击 启动服务 按钮来启动服务器,这样就可以接受用户的联入了;单击 查看用户 按钮,显示在线用户和他所在房间编号,可以删除用户即:踢出系统;单击 查看聊天室 按钮,显示聊天室的编号和名称,可以删除聊天室;单击退出,返回到登录界面。客户端:   1.客户端运行后,如果已有账号,则输入帐号和密码,点击登录来登录系统;如果还没有账号,则可以点击 没有注册?来注册一个新用户;如果忘记密码,则可以单击 忘记密码?来找回密码。2.注册时,可按照注册页面上提示来填写个人基本信息。用户名和密码为必填,安全问题和安全问题答案是用来找回密码的。其他信息可不填。3.找回密码时,需要输入用户名和安全问题答案,如果用户名和安全问题都正确,则会出现提示,请牢记你的密码:*****。4.登陆成功后,显示用户主界面。单击创建聊天室,可以创建自己的聊天室,其他人也可以加入聊天室;选中一个聊天室,单击加入聊天室,则可以进入选中的聊天室;如果想退出,则单击退出按钮即可。
 
网络聊天系统源代码5.创建聊天室时,输入想要创建的聊天室名称,单击创建,如果没有重复,则会直接进入自己的聊天室中。6.进入聊天室后,可以输入你想要对其他用户说的话,单击发送即可将自己的话显示给其他用户;如果想查看聊天记录,单击聊天记录,就可以看到自己的聊天记录;如果想退出,直接关闭窗口即可,就会返回到用户主界面。7.查看聊天记录时,如果想保存聊天记录到本地,点击保存,就会把聊天记录以文本文件的方式保存到本地;单击取消则会回到聊天室界面。4.1安装和初始化【给出程序的存储形式、操作命令、反馈信息及其含意、表明安装完成的测试实例以及安装所需的软件工具等。】4.2输入【给出输入数据或参数的要求。】4.2.1数据背景【说明数据来源、存储媒体、出现频度、限制和质量管理等。】4.2.2数据格式【如:a. 长度;b. 格式基准;c. 标号;d. 顺序;e. 分隔符;f. 词汇表;g. 省略和重复;h. 控制。】4.2.3输入举例4.3输出【给出每项输出数据的说明。】4.3.1数据背景【说明输出数据的去向、使用频度、存放媒体及质量管理等。】4.3.2数据格式【详细阐明每一输出数据的格式,如:首部、主体和尾部的具体形式。】4.3.3举例4.4出错和恢复【给出:a. 出错信息及其含意;b. 用户应采取的措施,如修改、恢复、再启动。】4.5求助查询【说明如何操作。】5.运行说明5.1运行表【列出每种可能的运行情况,说明其运行目的。】5.2运行步骤【按顺序说明每种运行的步骤,应包括:】5.2.1运行控制5.2.2操作信息a. 运行目的;b. 操作要求;c. 启动方法;d. 预计运行时间;e. 操作命令格式及说明;f. 其他事项。5.2.3输入/输出文件【给出建立或更新文件的有关信息,如:】a. 文件的名称及编号;b. 记录媒体;c. 存留的目录;d. 文件的支配【说明确定保留文件或废弃文件的准则,分发文件的对象,占用硬件的优先级及保密控制等。】5.2.4启动或恢复过程6.非常规过程【提供应急或非常规操作的必要信息及操作步骤,如出错处理操作、向后备系统切换操作以及维护人员须知的操作和注意事项。】7.操作命令一览表【按字母顺序逐个列出全部操作命令的格式、功能及参数说明。】8.程序文件(或命令文件)和数据文件一览表【按文件名字母顺序或按功能与模块分类顺序逐个列出文件名称、标识符及说明。】9.用户操作举例1.服务器:---运行软件后,会出现登陆对话框: ---单击登陆按钮,如果管理员信息正确则显示管理页面: ---单击启动服务按钮,聊天系统服务器开始工作 ---单击查看用户按钮,显示在线用户: 2.客户端:---运行软件后,出现登陆窗口: ---如果没有注册,可单击 未注册? 来注册新用户: ---登陆后,显示用户主界面:---加入聊天室后,出现聊天主界面:
  • 上一篇资讯: 厨艺秀评分办法
  • 下一篇资讯: java手机游戏设计
  • 相关资讯

    网学推荐

    原创论文

    文章排行榜

    设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师