您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > 局域网内部聊天系统课程设计
摘要随着计算机网络技术的发展,各种各样基于网络的应用也随之诞生,比如基于互联网的信息发布,通信,数据共享等等。局域网的发展也同样迅速。很多政府机构,企业,学校,都是先以一个同意的局域网联结在一起,再分别接入Internet。因此,基于局域网的即时通信工具,就这样应运而生了。所以本文提出了一个更加合理的设计,并在Windows平台上加以了实现。在本系统中,分别创建了客户端和服务端两个程序,用多线程实现不同的并行任务。并进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理,又易于扩展以及个性化定制。本文通过局域网聊天系统来具体共享内存实现进程间的数据交换,利用Windows消息机制实现进程间的同步,两种机制结合使用。关键字:局域网;即时通信;客户端;服务端;多线程;共享内存;信息。目录1课程设计目的..................................................................................12课程设计要求..................................................................................13相关知识..........................................................................................14实训设计分析..................................................................................34.1体系结构设计............................................................................34.2功能模块划分............................................................................44.3系统流程图................................................................................64.4用户界面设计............................................................................75程序代码..........................................................................................96运行结果与分析............................................................................137结论................................................................................................148参考文献........................................................................................14No11课程设计目的1)巩固和加深学生对C#语言课程的基本知识的理解和掌握2)掌握C#语言编程和程序调试的基本技能3)利用C#语言进行基本的网络软件设计4)掌握书写程序设计说明文档的能力5)提高运用C#语言解决实际问题的能力2课程设计要求1)分析课程设计题目的要求2)写出详细设计说明3)编写程序代码,调试程序使其能正确运行4)设计完成的软件要便于操作和使用5)设计完成后提交课程设计报告3相关知识1、TCP/IP协议[1]通常包含了一系列与“TCP(传输控制协议)”和“IP(网际协议)”有联系的网络协议,它包括其它的协议,应用软件,甚至网络媒介。这些协议的示例是:UDP(UserDatagramProtocol)协议、ICMP(InternetControlMessageProtocol)协议、ARP(地址解析协议)和其他一些协议的协议组。应用的示例:telnet(远程登录)、ftp(文件传递协议)、http等。No22、进程及线程概述进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。No34实训设计分析4.1体系结构设计通常的通信工具,都采用客户机/服务器(C/S)体系结构,C/S结构是这样的一种结构:它包括一个客户机(或前端),一个服务器(或称后端),客户机的作用是访问和处理远程服务器上的数据,服务器的作用是接收和处理客户机的数据请求。有时,可能有多个客户向同一个服务器同时请求服务,这就需要服务器决定怎样处理这些请求。Client/Server结构是当前数据库应用程序中极为流行的一种方式。尤其是网络技术的发展,使得当前很多系统都采用这种方式进行构造,其最大的优点是将计算机工作任务分别由客户端和服务器端来共同完成,这样有利于充分合理的利用系统资源。另外它的服务器端还可以将信息集中起来,任何客户机都可以通过访问服务器而获得所需的信息。Client/Server模型最终可归结为一种“请求/应答”关系。一个请求总是首先被客户发出,然后服务器总是被动地接收请求,返回客户需要的结果。在客户发出一个请求之前,服务进程一直处于休眠状态。一个客户提出请求后,服务进程被“唤醒”并且为客户提供服务,对客户的请求做出所需要的应答[2]。如下图所示:No4图4.1客户机/服务器通信结构示图在客户端启动后,客户端计算得到本地网络的广播地址,进行广播查找服务器端,服务器接收到客户端的广播信息后返回服务器地址,则客户端接收、验证信息并记录服务器端地址,然后客户端启动定时期,定时发送信息到服务器,以告知服务器自己在线,然后服务器返回在线用户列表,服务器依靠客户端发送的信息来更新维护在线用户列表。在客户端与服务器尽心数据交换,拥有了在线用户列表后,就可以选择IP进行客户端之间的点对点信息交流了。如果服务器不在线,则客户端会提示用户退出,在一定的时间后自动退出。4.2功能模块划分系统的功能模块划分如下图所示:No5图4.2功能模块图其中主线程模块完成对网络的初始化,然后启动两个子线程:服务端监听线程以及网络扫描模块线程,然后由网络扫描模块得到当前的网络用户分布情况,并填充相关的数据结构,然后生成用户列表界面显示给用户。通信模块又包括两个子模块:数据接收模块和数据发送模块,这两个模块都由系统定义的网络事件来触发。输入/输出模块用来响应用户单击用户列表的某一项要准备发送信息时的消息,以及当系统接收到某个网络用户发送来的消息,要将其显示给用户的时候。网络扫描模块是由主线程模块启动,进行网络扫描,确定哪些用户当前处于可到达状态,以及哪些可到达状态的用户安装有相应的通信软件,并启动之可以与之进行通信。No64.3系统流程图1、局域网聊天系统工作流程图图4.3聊天系统工作流程图2、服务器监听流程图图4.4服务器监听流程图启动服务器;等待客户登录;处理用户数据。启动客户端聊天显示所有人信息显示私聊信息登录服务器发送消息显示在线用户YY用户1侦听检查用户用户2用户n判断用户在线标识用户在线更新用户列表NN…………No73、客户信息交流模块流程图图4.5客户信息交流流程图4.4用户界面设计在能够完全满足软件所需功能,设计界面要清爽、操作要简单易懂的基本原则下,本软件的界面设计如下:服务器端显示界面如下:Y开始用户登录(侦听)获取当前登录用户列表选择聊天的用户发送聊天信息到服务器窗体上显示发送的信息接收各个客户端发送的信息选择对应的消息接收的用户服务器将消息转发给对方用户处理用户的消息服务器端客户端YYNNNNo8图4.6服务器端界面图客户端显示界面如下:图4.7客户端界面图No95程序代码1、服务器端主要程序代码如下:///summary【开始监听】按钮的Click事件/summaryprivatevoidbuttonStart_Click(objectsender,EventArgse){myListener=newTcpListener(localAddress,port);myListener.Start();AddItemToListBox(string.Format(开始在{0}:{1}监听客户连接,localAddress,port));//创建一个线程监听客户端连接请求ThreadmyThread=newThread(ListenClientConnect);myThread.Start();buttonStart.Enabled=false;buttonStop.Enabled=true;}///summary接收客户端连接/summaryprivatevoidListenClientConnect(){TcpClientnewClient=null;while(true){try{newClient=myListener.AcceptTcpClient();}catch{//当单击“停止监听”或者退出此窗体时AcceptTcpClient()会产生异常//因此可以利用此异常退出循环break;}//每接受一个客户端连接,就创建一个对应的线程循环接收该客户端发来的信息Useruser=newUser(newClient);ThreadthreadReceive=newThread(ReceiveData);threadReceive.Start(user);userList.Add(user);AddItemToListBox(string.Format([{0}]进入,newClient.Client.RemoteEndPoint));AddItemToListBox(string.Format(当前连接用户数:{0},userList.Count));}}///summary///处理接收的客户端数据////summary///paramname=userState客户端信息/paramprivatevoidReceiveData(objectuserState){Useruser=(User)userState;TcpClientclient=user.client;while(isNormalExit==false){stringreceiveString=null;try{//从网络流中读出字符串,此方法会自动判断字符串长度前缀,并根据长度No10前缀读出
本文标题:局域网内部聊天系统课程设计
链接地址:https://www.777doc.com/doc-5530008 .html