设计与实现Word格式.docx
- 文档编号:18358315
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:48
- 大小:136.02KB
设计与实现Word格式.docx
《设计与实现Word格式.docx》由会员分享,可在线阅读,更多相关《设计与实现Word格式.docx(48页珍藏版)》请在冰豆网上搜索。
此聊天程序将采用C/S模式即客户端/服务器模式。
客户端和服务器、客户端和客户端之间均采用UDP进行通信。
服务器主要负责储存局域网内所有用户的信息,当用户信息发生变化时通知所有客户端。
此外服务器还要负责分配用户的惟一标识Uid。
除此之外,服务器还能注销用户和群发系统消息。
客户端具有用户注册、用户登录和向局域网内任何一个用户发送信息的功能。
客户端需手动输入服务器地址。
关键词:
局域网聊天;
socket(套接字);
ODBC(开放数据互连);
客户端/服务器模式;
MFC(微软基础类);
多线程;
UDP(用户数据报协议)
Abstract
TheLANchatprograminthisarticlewillusethedesignprocedureoftheSoftwareEngineeringtodesignwithSocketNetworkProgramming,ODBCDatabaseProgramming,WindowsMFCProgramming,Multithread.ThisprogramwilladoptVC6.0asthesystemDevelpomenttool,andSQLSever2000asthedatabsemanagementsystem,whiletheODBCmanagementtoolbelongtoMicrosoftOperatingSystemisusedtolinktheprogramanddatabse.ThischatprogramwillbebasedonC/Sarchitecture.ThecommunicationbetweenclientandserverorclientandclientwilldependontheUDPprotocol.TheServerisinchargeofstoringtheinformationofalltheusersinttheLAN,andnotifyalltheuserswhiletheinformationchange.Exceptthat,whattheSeverwilldoistoassigntheUidwhichoneistheonlymarkofclientuser,deleteuserandsendsystemmessagetoallusers.TheClientisinchargeofuserregister,userlogonandchattingwithanyoneelseintheLAN.TheClientneedtomanuallyinputtheaddressoftheServer.
Keywords:
LANchat,socket,ODBC,C/S,MFC,multithread,UDP
声明………………………………………………………I
摘要………………………………………………………I
Abstract…………………………………………………Ⅱ
1引言……………………………………………………1
1.1课题背景及意义………………………………………………1
1.2课题现状………………………………………………………1
1.3开发平台及开发技术的介绍…………………………………1
1.3.1VC++6.0开发平台介绍……………………………………………….1
1.3.2WindowsSocket网络编程简介……………………………………….2
2需求分析及可行性研究…………………………………2
2.1需求分析……………………………………………………….2
2.1.1功能需求分析……………………………………………………………2
2.1.2数据需求分析……………………………………………………………2
2.1.3性能需求分析……………………………………………………………2
2.1.4运行需求分析……………………………………………………………2
2.2可行性研究…………………………………………………….2
3相关开发技术的原理性说明……………………………3
3.1win32编程原理及MFC框架………………………………….3
3.1.1win32编程原理…………………………………………………………3
3.1.2MFC框架…………………………………………………………………4
3.2TCP/IP协议及WINDOWSSOCKETS网络编程接口……………4
3.2.1TCP/IP协议简介…………………………………………………………4
3.2.2WindowsSockets网络编程接口………………………………………4
3.3多线程技术……………………………………………………5
3.3.1进程及线程概述…………………………………………………………5
3.3.2Win32API对多线编程的支持…………………………………………6
3.4MFCODBC数据库访问技术……………………………………7
3.4.1ODBC简介………………………………………………………………7
3.4.2MFC封装的ODBC数据库类……………………………………………7
3.4.3应用ODBC编程方法介绍………………………………………………8
4总体设计……………………………………………….9
4.1体系结构设计…………………………………………………9
4.2功能模块设计…………………………………………………9
4.3数据结构设计…………………………………………………10
5详细设计与编码实现………………………………….11
5.1服务器详细设计………………………………………………11
5.1.1服务器界面设计………………………………………………………11
5.1.2服务器通信模块设计…………………………………………………15
5.2客户端详细设计…………………………………………….23
5.2.1客户端界面设计………………………………………………………23
5.2.2客户端通信模块设计…………………………………………………30
6测试……………………………………………………42
6.1功能性测试………………………………………………….42.
6.2容错性测试………………………………………………….42
参考文献…………………………………………………42
1引言
1.1课题背景及意义
随着计算机科学技术的飞速发展,网络越来越深刻的改变着人们生活方方面面。
各种基于网络的应用技术在人们的政治、经济、生活等的各个方面都发挥着重要的作用。
例如QQ,MSN等基于Internet的即时聊天工具。
这些工具通过网络这个新兴的媒介进行信息交流相比其他传统媒介具有数据量大,实时性强,操作简单,成本低廉等优点。
不仅如此即时聊工具还具备许多传统媒介不具备的强大功能,它们能传送文字、声音、影像和文档,而且能更加人性化的显示联络人的名单和通信状态。
因而它们在现实生活中受到了广泛的欢迎,这是有目共睹的。
目前基于Internet的即时聊天工具已经做的非常完美,然而基于局域网的即时聊天工具却不如人意。
而在高等教育方面,网络展现出不可替代的作用。
为了适应现代信息化,教学局域网就应运而生。
而教学局域网内的即时通信能力则显得尤为重要。
所以对于学校和公司内部网络等机构,局域网即时聊天的应用还是相当重要的。
一个好的局域网通信软件将对学校和公司的运作产生积极的影响。
1.2课题现状
基于局域网的即时通信软件的核心技术其实与基于Internet的即时通信软件的设计技术是一样的,只是规模较小。
基于Internet的通信工具一般是采用UDP或TCP协议来实现的,开发技术已经非常成熟。
比如QQ、MSN等等,它们都是基于Internet的即时通信软件,它们不仅实现了即时聊天、文件传输等功能,而且还能够实现网络即时视频、语音聊天功能。
它们的功能正在不断扩充,使其更加人性化,满足人们更多的需求。
这类软件其实都是在下层协议的基础之上,通过网络通信接口进行设计的软件产品。
在局域网内,这类软件的设计比在Internet中设计更为简单。
因为Internet是网络的网络,结构更为复杂,碰到的状况比在局域网中要多。
而局域网中事情就简单的多了,所以局域网聊天工具在实现即时通信时就相对容易些了。
1.3开发平台及开发技术的介绍
1.3.1vc++6.0开发平台介绍
VisualC++是当今被广泛使用的可视化编程环境之一,它为我们提供了方便、快捷的Windows应用程序开发工具。
它使用了MicrosoftWindows图形用户界面的许多先进特性和设计思想,采用了可重复利用的完整的面向对象程序语言。
而VC6.0是VisualC++的一个比较成熟的版本,作为一个学习程序设计和进行系统开发的软件,它都做得不错。
本人在校期间也是一直使用VC6.0来学习程序设计,所以对它比较熟悉。
同样作为微软开发的软件系统,用它来开发Windows应用程序则更加得心应手。
1.3.2WindowsSocket网络编程简介
WindowsSocket是一个网络编程接口。
虽然它并不是协议,但是它可以访问很多种网络协议。
它可以看作是一些协议的封装,而且它已经基本实现了协议无关性。
对于TCP/IP协议,windowssocket主要采用UDP或TCP来进行通信。
UDP协议是一种不可靠的、无连接的传输协议,而TCP则是一种可靠的、面向连接的传输协议。
2需求分析及可行性研究
2.1需求分析
2.1.1功能需求分析
程序要实现的功能:
程序启动之后要能够知道局域网内哪些用户在线,并可以与之通信;
一旦某个网内用户上线或离线,需要立即更新信息,并通知所有在线用户;
当双击用户列表中某个列表项时,要能够弹出信息发送框,并可以编辑要发送的信息,然后发送;
当收到信息时,需弹出信息接收框,显示用户接收到的信息,并知道是谁所发。
2.1.2数据需求分析
对于局域网内的用户需要具体的数据信息来表示,服务器则需要一个保存所有用户信息数据表,其基本内容应包括用户ID,用户名,密码,状态,及IP地址。
2.1.3性能需求分析
首先要保证程序的可靠性,可以应对各种由于系统问题产生的错误,比如网络连接失败,信息发送失败。
要求尽可能多的预防此类事情的发生,并准备好应对措施和向用户提供的提示信息。
另外要保证程序有一定的容错性,当用户进行非法操作或系统本身出现错误时要能以合适的方式退出程序。
2.1.4运行需求分析
由于此程序将采用MFC框架进行设计,所以此程序必须运行于装有VC系统的Windows操作系统中。
服务器端则需要SQLSever2000数据库管理系统对用户数据进行管理,并能进行数据收发;
客户端则只要能够进行数据收发即可。
2.2可行性研究
本软件只是做开发学习之用,所以不必考虑成本问题。
由于在软件设计之前,已经做好了需求分析以及充分的前期准备工作。
确定了本程序的平台为Windows,将要使用udpsocket进行网络通信,此程序的开发系统为VC。
而VC开发Windows程序的能力有目共睹的。
因此此程序在开发的技术可行性上是完全行得通的。
3相关开发技术的原理性说明
3.1win32编程原理及MFC框架
3.1.1WIN32编程原理
所谓的Win32开发,就是在C语言的层面上,直接使用Win32API开发Windows应用程序或者系统程序。
所谓的Win32,其实是一个API规范,与UNIX系统编程接口标准POSIX是相对应的。
下面是进行直接的WIN32SDK方式编程的基本思路或者说是一个框架:
一个WINDOWS程序分为程序代码和UI(UserInterface用户接口)资源两大部份,两部份最后以RC编译程序整合为一个完整的EXE文件。
所谓UI资源是指功能菜单、对话框、程序图标、光标形状等等东西。
这些UI资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如.ico.bmp.cur等等。
程序员必须在一个所谓的资源描述档(.rc)中描述它们。
RC编译器(RC.EXE)读取RC文件的描述后将所有UI资源文件集中制作出一个.RES文件,再与程序代码结合在一起,这才是一个完整的Windows可执行文件。
与控制台程序相同的是,一个WIN32程序也必须有一个程序入口点,但是在这儿它不再叫main(),而叫做WinMain(),当WINDOWS的SHELL检测到用户欲执行一个EXE程序,就会调用加载器把程序进行加载,然后调用Cstartupcode,后者再调用WinMain(),程序的执行就开始了。
WinMain()函数的原型为:
IntCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow);
程序必须进行的初始化工作-产生窗口,第一步是注册一个窗口类:
用API函数RegisterClass(),而这个函数需要一个已经定义好的系统结构WNDCLASS。
这个结构里面定义了窗口的种种属性,需要自己定义,但是许多属性都有默认值。
然后调用CreateWindow()函数来产生具有上述定义属性的已注册窗口,但是需要注意的是它只是生成窗口,但并不显示之,所以还需要调用一个函数ShowWindow()将它显示在屏幕上,做完这些初始化工作以后,系统将进入消息循环:
while(GetMessage(&
msg,NULL,0,0))
{
TranslateMessage(&
msg);
DispatchMessage(&
}
当消息循环捕捉到消息以后将交由窗口函数WndProc()窗口函数进行相应的处理。
这样,一个基于消息事件驱动的WIN32程序的雏形就建立了起来。
3.1.2MFC框架
MFC其实就是MicrosoftFoundationClasses,又称微软基础类库。
它是VC开发环境的一个核心构件。
构建一个基于MFC框架的程序,可以使用MFC的向导程序。
一个基于MFC的程序可以有几种类型:
基于单文档结构的程序,基于多文档结构的程序以及基于对话框的应用程序,不同类型的程序具有不同的程序属性。
使用其向导以及控件编程,使得不论是界面编写,还是程序内核设计,都更加的简单。
其中有合理的消息映射机制,有方便的运行时类型识别功能,更有文档/视图结构设计,文档串行化功能等非常多的优秀功能。
3.2TCP/IP协议及WINDOWSSOCKETS网络编程接口
3.2.1TCP/IP协议简介
TCP/IP协议实际上是一个目前被使用最广泛的协议簇,它为网络中的主机通信提供了从上到下的完整的通信规范。
它主要包括以下几层:
应用层,传输层,网络层,数据链路层,物理层。
它每层都会包含一些协议。
其中最主要的协议就是IP协议和TCP协议。
IP协议又称网际协议,它是网络层的协议。
它主要负责网络中数据的路由转发同时为上一层传输层的协议提供底层服务。
IP协议是一种不可靠的协议,不会对差错进行控制。
但它可以借其他协议来实现可靠传输功能。
例如ICMP协议,又叫网际控制报文协议。
它的主要功能是当主机或路由器出现异常时,返回异常信息。
TCP协议又称传输控制协议,它是一个传输层协议。
它为主机之间提供端到端的可靠的数据传输。
而本课题所采用的UDP协议也是传输层协议,只是它提供的是无连接的,不可靠的数据传输。
3.2.2WINDOWSSOCKETS网络编程接口
之前已经说过,windowssockets是封装了协议的编程接口。
它让程序开发人员在进行网络编程时更加直观的进行通信,不用在乎协议的细节。
现在就介绍几个最常用的WindowssocketAPI。
WSAStartup():
初始化。
函数原型:
intPASCALFARWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);
为了完成一系列初始化操作,每一个使用WindowsSocket的应用程序都必须进行WSAStartup()函数调用,并只有在成功地完成调用之后才能使用Socket。
Socket():
创建一个Socket。
SOCKETsocket(intaf,inttype,intprotocol);
所有通信在建立之前都要创建一个Socket,type是表示Socket的类型,当采用流连接方式时用SOCK_STREAM,用数据报文方式时用SOCK_DGRAM。
Bind():
为创建的Socket指定通信对象。
intbind(SOCKETs,structsockaddr_in*name,intnamelen);
Listen():
设置等等连接状态。
intlisten(SOCKETs,intbacklog);
对于服务器的程序,当申请到Socket,并指定通信对象为INADDR_ANY之后,就应该等等一个客户机的程序来要求连接。
Accept():
接受连接请求。
SOCKETaccept(SOCKETs,structsockaddr_in*addr,int*addrlen);
Connect():
对于客户程序,要主动提出连接请求,应使用connect()函数。
intconnect(SOCKETs,structsockaddr_in*name,intnamelen);
当采用TCP进行通信时,收发数据的函数为:
intsend(SOCKETs,char*buf,intlen,intflags);
intrecv(SOCKETs,char*buf,intlen,intflags);
当采用UDP进行通信时,收发数据的函数为:
intrecvfrom(SOCKETs,char*buf,intlen,intflags,structsockaddr_infrom,int*formlen);
Intsendto(SOCKETs,char*buf,intlen,intflags,structsockaddr_into,int*tolen);
Closesocket():
关闭socket。
closesocket(SOCKETs);
3.3多线程技术
3.3.1进程及线程概述
进程和线程都是操作系统的概念。
进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。
线程是进程内部的一个执行单元。
系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。
主执行线程终止了,进程也就随之终止。
每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。
用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。
一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。
多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。
要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。
由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。
Win32SDK函数支持进行多线程的程序设计,并提供了操作系统原理中的各种同步、互斥和临界区等操作。
VisualC++6.0中,使用MFC类库也实现了多线程的程序设计,使得多线程编程更加方便。
3.3.2Win32API对多线程编程的支持
Win32提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作。
下面将选取其中的一些重要函数进行说明:
(1)HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,
DWORDdwStackSize,
LPTHREAD_START_ROUTINElpStartAddress,
LPVOIDlpParameter,
DWORDdwCreationFlags,
LPDWORDlpThreadId);
该函数在其调用进程的进程空间里创建一个新的线程,并返回已建线程的句柄。
(2)DWORDSuspendThread(HANDLEhThread);
该函数用于挂起指定的线程,如果函数执行成功,则线程的执行被终止。
(3)DWORDResumeThread(HANDLEhThread);
该函数用于结束线程的挂起状态,执行线程。
(4)VOIDExitThread(DWORDdwExitCode);
该函数用于线程终结自身的执行,主要在线程的执行函数中被调用。
其中参数dwExitCode用来设置线程的退出码。
(5)BOOLTerminateThread(HANDLEhThread,DWORDdwExitCode);
一般情况下,线程运行结束之后,线程函数正常返回,但是应用程序可以调用TerminateThread强行终止某一线程的执行。
使用TerminateThread()终止某个线程的执行是不安全的,可能会引起系统不稳定;
虽然该函数立即终止线程的执行,但并不释放线程所占用的资源。
因此,一般不建议使用该函数。
(6)BOOLPostThreadMessage(DWORDidThread,UINTMsg,WPARAMwParam,LPARAMlParam);
该函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 实现