1、 成都东软信息技术职业学院 摘 要局域网(Local Area Network)是在一个局部的地理范围内(如一个学校、工厂和机关内),将各种计算机。外部设备和数据库等互相联接起来组成的计算机通信网。它可以通过 数据通信网或专用数据电路,与远方的局域网、数据库或处理中心相连接,构成一个大范围的信息处理系统。简称LAN,是指在某一区域内由多台计算机互联成的计算机组。“某一区域”指的是同一办公室、同一建筑物、同一公司和同一学校等,一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、扫描仪共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台
2、计算机组成,也可以由一个公内的上千台计算机组成。局域网聊天软件,简称LCS(LAN chat software),它是一种面向企业局域网终端使用者的网络沟通工具服务,使用者可以通过安装了即时通信的终端机进行两人或多人之间的实时沟通。交流内容包括文字、界面、语音视频及文件互发等。局域网聊天软件,是以企业内部办公,建立员工交流平台为基础,通过系统整合、边缘功能,为企业提供一整套的即时沟通和实时协作的解决方案。由于企业对信息 类软件的需求还在“探索”与“尝试”阶段,所以会导致很多系统不能“互通”,这也成了局域网聊天软件的一个使命。当信息软件被广泛使用之后,“互通”接口具备否,将被作为软件被选用的重要
3、条件。局域网聊天软件,除了能加强网络之间的信息沟通外,最主要的是可以将网站信息与聊天用户紧密联系在一起。通过网站信息向聊天用户群及时群发送,可以迅速吸引聊天用户群对网站的关注,从而加强网站的访问率与回头率; 目前,中国市场上的企业级局域网聊天软件主要包括:通软联合的GoCom、腾讯公司的RTX、IBM的Lotus Sametime等,免费版的有中国赢通的汇讯WiseUC,飞秋飞鸽传书等。局域网聊天软件不再是一个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。是一种终端连往即时通讯网络的服务。局域网通讯不同于e-mail在于它的交谈
4、是即时的。大部分的即时通讯服务提供了状态信息的特性显示联络人名单,联络人是否在在线与能否与联络人交谈。关键字:局域网;实时通信;数据库;多用户 - 21 -目 录摘 要I第一章 引言11.1 课题背景及意义11.2 本次设计的主要工作21.2.1 技术要求21.2.2 系统的基本功能2第2章 需求和可行性分析32.1 需求分析32.1.1 基本功能32.1.2 性能要求32.1.3 时间要求32.2 可行性研究42.2.1 市场可行性分析42.2.2 技术可行性分析4第3章 相关技术介绍53.1 WIN32编程原理53.2 TCP/IP 协议53.3 TCP/IP通信协议的安装63.4 协议选
5、择的原则73.4.1 所选择的协议要与网络结构、功能一致73.4.2 尽量选用一种协议73.4.3 保持协议的一致性73.5 线程编程技术8第4章 系统总体设计94.1 用户界面设计94.1.1 用户界面简介94.1.2 用户界面模块详细设计104.1.3 聊天界面模块详细设计114.1.4 接收信息模块详细设计134.2 功能模块划分154.3 体系结构设计16结束语17致谢18参考文献19第一章 引言1.1 课题背景及意义当今世界正处于信息时代,计算机和通信网络是这一时代所谓“信息基础设施”。随着网络的普及化,网络作为人们相互间沟通与交流联系的现代化工具日益重要,可以说现在人们的生活已经离
6、不开网络。在现实生活中人们可以通过多种手段与家人亲戚朋友交流通讯,像电话,电子邮件等。但这些手段都有些缺点,要么费用太高,要么实时性不强,要么1次只能和1位好友进行交流。于是这就需要1种便宜,快速,能同时与多个好友进行通讯的网络工具的出现,而网络聊天工具就满足了这些需求,填补了这个空白。在互联网相当普及的今天,在互联网上聊天对很多“网虫”来说已经是家常便饭了。聊天室程序可以说是网上最简单的多点通信程序。一个简单的聊天室, 从程序员的观点来看就是在多个I/O端点之间实现多对多的通信。广域网上的即时通信工具,如今一般采用UDP或者 TCP协议体系来实现,开发技术已经比较成熟,这些软件,在使用方面各
7、有特色,在实现方面也各有所长,但基于这些产品正在商业运营阶段,其实现方式属于商业机密,具体细节不可能得知,但是它在大的方面无非就是利用各种平台上的网络通信接口,建构基于TCP/IP,或者UDP协议的软件产品。局域网文件传输及聊天工具平台,是在局域网内部使用的,用户之间用来交流和文件共享的一个工具,一般都具有文本聊天和文件传输功能。一些局域网软件因其使用简单,系统资源消耗少等优点,成为各企事业单位等的局域网内广泛应用的软件之一。网络的飞速发展使网络应用程序的开发地位显的越来越重要,而网络应用程序的开发和传统应用程序的开发在思想和实现上有很大的区别,随着网络技术和数据库管理系统的发展,C/S体系结
8、构在软件的开发中越来越流行。因为这种结构的应用软件可以充分发挥网络的作用和数据库系统的优势,以满足人们各种应用的需求。1.2 本次设计的主要工作1.2.1 技术要求聊天工具的开发主要用到了网络通信技术、windows的多线程技术、文件传输技术、时钟技术、IO技术。该聊天软件使用c#语言由VS2008开发的基于Windows 的winform通讯工具,可以实现点对点聊天、广播聊天、一对多聊天以及文件的传输。该聊天工具用到了多线程的设计,因此线程之间的同步是一大关键之处。由于系统采用客户机/服务器结构,客户端与客户端以及客户端与服务器端需要传送一些控制消息。1.2.2 系统的基本功能1、 系统UI
9、层2、 系统聊天层3、 系统文件传输层4、 系统多播层5、 我在该项目中负责的主要工作:系统文件传输层第2章 需求和可行性分析2.1 需求分析2.1.1 基本功能(1)程序启动之后要求输入你想要使用的昵称,输入完之后点击进入。(2)进入之后可以看到哪些机器在线,用户列表上显示的是对方所使用的昵称。(3)一旦局域网内有新机器上线了,会及时更新用户列表。(4)列表上的用户以按钮形式显示,当点击想要与之聊天的用户按钮时,弹出对话框,在输入框中编辑要发送的聊天信息,并进行发送。(5)当有人向我发送信息的时候,会自动弹出一个对话框,显示用户接收到的信息,对方昵称显示在标题栏中,并且可进行信息的回复。2.
10、1.2 性能要求首先要求程序的可靠性要高,能有效的应付种种意外情况,比如对方连接进来后,长时间未响应(未发送自己的昵称过来),在传输文件的过程中对方突然退出或突然掉线,要尽量的考虑周全这些意外情况,并向用户提交简单易懂清晰明白的提示信息程序要具备良好的容错性,当用户进行非法操作时要给予警告,如果操作导致程序无法继续运行或者系统本身出现问题时,以最好的方式退出程序,避免发生程序假死现象。源代码有好的可读性,开发文档要有好的易理解性,如果系统又要交由别人接手开发,或者自己由于种种原因需要进行二次开发,那么要保证以后能够清晰的理解整个系统的设计思路以及实现细节。要求程序对内存的占用尽可能的少,CPU
11、使用率尽可能的低,最好在各种情况下都能保持10%以下的CPU使用率,传输文件速度尽量可观。2.1.3 时间要求该项目作为毕业设计,选题时间是3月2号,在5月24号之前完成系统设计、编码等工作,在6月1号之前完成毕业设计论文初稿,6月7号之前最终完成论文。2.2 可行性研究2.2.1 市场可行性分析现在的软件市场还不是一般的乱,每天都有各种各样的软件推出,各种质量,各种目的,如果推出这种软件工具类的产品,首先,免费是肯定的,现在也没有什么聊天工具是收费才能聊天的,这款软件的可行性在于局域网内的通信工具还没有出现垄断的现象,质量很好的话还是有些可能出头的,所以在逻辑细节设计算法设计方面要下非常大的
12、功夫才行。2.2.2 技术可行性分析首先,在搭建好开发所需要的软硬件平台后,一个完善合理的需求分析是软件开发前期工作中必不可少的,该系统用c#语言由VS2008开发的基于Windows 的winform通讯工具,TCP应用编程提供的类(TcpListener,TcpClient,Socket)都是网络编程的好东西,基本应有的功能都可靠这些实现,再加上有获得巨大成功的通讯软件可以参考,所以这个程序的开发可行性在技术上是完全可行的。第3章 相关技术介绍3.1 TCP/IP协议TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译
13、名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络 的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。TCP/IP 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。TCP/IP是一个四层的分层体系结构。高层为传输控制协议,它负责聚 集信息或把文件拆分成更小的包。低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。TCP/IP(传输控制协议/网际协议)是异构网络互连的通信协议,通过它可以实现各种异构网络或异种机之间的互联通信。 TCP/IP已成为当今计算机网络最成熟
14、、应用最广的互联协议。Internet采用的就是 TCP/IP协议,网络上各种各样的计算机上只要安装了TCP/IP协议,它们之间就能相互通信。运行TCP/IP协议的网络是一种采用包(分组)交换网 络。TCP/IP协议是由100多个协议组成的协议集,TCP和IP是其中两个最重要的协议。TCP和IP两个协议分别属于传输层和网络层,在 Internet中起着不同的作用。3.2 UDP协议UDP是ISO参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。UDP协议的全称是用户数据包
15、协议,在网络中它与TCP协议一样用于处理 UDP数据包。在OSI模型中,在第四层传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。 与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶
16、层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。 UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。3.3 TCP应用编程TCP是Transm
17、ission Control Protocol(传输控制协议)的简称,是TCP/IP体系中的面向连接的传输层协议,在网络中提供全双工的和可靠的服务。一旦双方建立了TCP连接, 连接中的任何一方都能向对方发送数据并接收对方发来的数据。发送数据时,程序员可以编写程序不断地将数据流写入TCP的发送缓冲区中,然后TCP自动从发 送缓冲区中取出一定量的数据流写入TCP的发送缓冲区中,然后TCP自动从发送缓冲区中取出一定量的数据,将其组成TCP报文段逐个发送给IP层,再通过 IP层发送出去。接收端从IP层收到TCP报文段后,将其暂时保存在接收缓冲区中,这时程序员就可以编写程序依次读取接收缓冲区中的数据,从
18、而达到通信的 目的。 利用TCP开发应用程序时,.NET框架提供两种工作方式,一种是同步(Synchronous)工作方式,一种是异步(Asynchronous)工作方式。 同步工作方式是指利用TCP编写的程序执行到发送、接收或监听语句时,在未完成工作前不再继续 下面的工作,即处于阻塞状态,直到该语句完成相应的工作后才继续执行下一条语句;异步工作则不论工作完成与否,都会继续往下执行。例如:接收数据时,在同 步方式下,接收方执行到接收语句后将处于阻塞方式,只有接收到对方发来的数据后才继续执行下一条语句;而如果采用异步方式,则接收方执行到接收语句后,无 论是否接收到对方的数据,程序都会继续执行。
19、与同步工作方式和异步工作方式对应,利用Socket类进行编程时,系统也提供有相应的方法, 分别称为同步套接字编程和异步套接字编程。但是使用套接字编程比较复杂,涉及许多底层细节。为了简化套接字编程,.NET框架又专门提供了两个 类:TcpClient类和TcpListener类。由于这两个类与套接字一样分别有各自的同步和异步工作方式及其对应的方法,在编程时,三个类都可以 使用。因此为了简化起见,无论使用哪个类,我们都从工作方式上将其称为同步TCP和异步TCP,对应的编程方式就称为同步TCP编程和异步TCP编程。 注意:这里的同步TCP与异步TCP仅仅是指工作方式,与线程间的同步不是一个概念。线程
20、间的同步是指不同线程或不同线程使用的某些资源具有先后关联的关 系,它决定着逻辑执行顺序。比如有A和B两个资源,实际应用中要求只有对资源A处理后才能处理资源B,就说资源A与资源B存在同步关系。如果执行顺序不正 确就会引发错误。所以,线程间的同步关注的是一种逻辑关系。而同步TCP和异步TCP则仅仅指编程中采用哪种工作方式,即从执行到发送、接收或监听语句 时,程序是否是继续住下执行这个角度来说的。 从逻辑关系上看,无论是同步TCP编程,还是异步TCP编程,在实际应用中既可能要求不同线程间同步,也可能不要求同步。3.4 线程编程技术一般来说,我们把正在计算机中执行的程序叫做进程(Process) ,而
21、不将其称为程序(Program)。所谓线程(Thread),是进程中某个单一顺序的控制流。 新兴的操作系统,如Mac,Windows NT,Windows 95等,大多采用多线程的概念,把线程视为基本执行单位。线程也是Java中的相当重要的组成部分之一。 甚至最简单的Applet也是由多个线程来完成的。在Java中,任何一个Applet的paint()和update()方法都是由AWT(Abstract Window Toolkit)绘图与事件处理线程调用的,而Applet 主要的里程碑方法init(),start(),stop()和destory() 是由执行该Applet的应用调用的。 单
22、线程的概念没有什么新的地方,真正有趣的是在一个程序中同时使用多个线程来完成不同的任务。 某些地方用轻量进程(Lightweig ht Process)来代替线程,线程与真正进程的相似性在于它们都是单一顺序控制流。然而线程被认为轻量是由于它运行于整个程序的上下文内,能使用整个程序 共有的资源和程序环境。 作为单一顺序控制流,在运行的程序内线程必须拥有一些资源作为必要的开销。例如,必须有执行堆栈和程序计数器。在线程内执行的代码只在它的上下文中起作用,因此某些地方用执行上下文来代替线程。多线程是与单线程比较而言的,普通的Windows采用单线程程序结构,其工作原理是:主程序有一个消息循环,不断从消息
23、队列中读入消息来决定下一步 所要干的事情,一般是针对一个函数,只有等这个函数执行完之后,主程序才能接收另外的消息来执行。比如子函数功能是在读一个网络数据,或读一个文件,只有 等读完这个数据或文件才能接收下一个消息。在执行这个子函数过程中你什么也不能干。但往往读网络数据和等待用户输入有很多时间处于等待状态,多线程利用这个特点将任务分成多个并发任务后,就可以解决这个问题。第4章 系统总体设计4.1 用户界面设计4.1.1 用户界面简介图4.1 局域网QQ登陆界面当用户双击程序图标时应该正常启动程序,弹出登陆界面, 如图4-1,然后输入你想使用的昵称后点击进入,便会进入到用户主界面如图4-2。 图4
24、.2 局域网QQ主界面我们做的是仿QQ的聊天软件,所以也做了浮动窗体这个小功能,当鼠标移出窗体时窗体自动收缩,只露在外面一小部分,当鼠标移到那一点部分时,窗体又自动展开,图标显示在托盘内,指向图标点击鼠标右键弹出contextMenuStrip,有打开窗体和退出两个选项,用鼠标左键单击你想要交谈的用户按钮弹出聊天对话框,如图4-3。图4.3 局域网QQ聊天对话框这就是聊天对话框,在上面你可以与对方交谈,互相传输文件。4.1.2 用户界面模块详细设计图4.4 用户界面程序启动时会加载当前在线用户 private void Form1_Load(object sender, EventArgs e
25、) label2.Text = 昵称:+nicheng; sm();/让本机开始侦听,接受连接请求 zj();/连入那些接受连接请求的主机 this.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width-5, 0); public void zj() listener = new TcpListener(8083); listener.Start(); listener1 = new TcpListener(8084); listener1.Start();/开始侦听 8083端口负责聊天8084端口负责传输文件 thread
26、= new Thread(new ThreadStart(chuangjian); thread.IsBackground = true; thread.Start(); public void chuangjian() while (true) Socket s = listener.AcceptSocket();/接受挂起的连接请求 Thread uu0 = new Thread(aczb); uu0.Start(s); public void sm()/ping出局域网内在线的机子 try for (int i = 0; i 0)/判断有没有要发送的文件 string pp = null
27、; for (int i = 0; i 0) string pp = null; for (int i = 0; i panel3.Controls.Count; i+) string p = * + panel3.Controlsi.Text + | + panel3.Controlsi.Tag.ToString() + *; pp += p; if (i = panel3.Controls.Count - 1) buffer = System.Text.Encoding.Default.GetBytes(w + pp); n.Write(buffer, 0, buffer.Length);
28、 richTextBox1.AppendText(你给 + bu.Text + 发送了 + panel3.Controls.Count + 个文件n); p3 = 0; panel3.Controls.Clear(); if (textBox1.Text != )/将你发送的消息显示到消息框中 string dt = DateTime.Now.ToString(); string split = dt.Split(new Char ); string str = 我 + split1 + n + textBox1.Text + n; richTextBox1.AppendText(str);
29、textBox1.Text = ; 4.1.4 接收信息模块详细设计 public void jieshou(string msg,ArrayList li,string bte) Form2 lt = (Form2)li3; if (msg0 = x)判断为聊天消息 msg = msg.Remove(0, 1); if (li2.ToString() = 0)/由于你是消息接受者,有可能最开始你并没有打开与对方聊天的对话框,那这时在对方发消息过来的时候,将自动弹出与对方聊天的对话框li2=0是未打开状态1是打开状态 lt.Text = bte; this.BeginInvoke(new fo
30、rmshow(lt.Show);/弹出对话框 this.BeginInvoke(new addtext(lt.add), msg); li2 = 1; else this.BeginInvoke(new addtext(lt.add), msg); else if (msg0 = w)/判断为传输文件消息 msg = msg.Remove(0, 1); if (msg.Contains(|) if (li2.ToString() = 0) lt.Text = bte; this.BeginInvoke(new addtext(lt.addp1), msg); this.BeginInvoke(
31、new formshow(lt.Show); li2 = 1; else this.BeginInvoke(new addtext(lt.addp1), msg); else Thread tr = new Thread(lt.write); tr.Start(msg); public void add(string yy)/在接受到对方传过来的消息后,将信息添加到消息框中,是对方发来的消息用红字显示 textBox1.Focus(); string dt = DateTime.Now.ToString(); string split = dt.Split(new Char ); string
32、 str = bu.Text + +split1+n+ yy + n; richTextBox1.AppendText(str); richTextBox1.SelectionStart = richTextBox1.Text.Length - str.Length; richTextBox1.SelectionLength = str.Length; richTextBox1.SelectionColor = Color.Red; 以上即各个模块的详细设计的主要实现过程。4.2 功能模块划分在本系统中,主机由Socket实现,客户机由TcpClient与NetworkStream实现,开启程
33、序后,加载事件启动主线程,主线程模块启动两个子线程: 服务端监听线程以及网络扫描模块线程,由网络扫描模块线程扫描局域网内在线的IP,然后为每个在线IP分配个小线程异步连接这些IP,最后连接成功的总合起来生成用户列表显示给用户,连接后自己本机当对方的客户机,服务端监听线程接受连接请求,连接成功后自己本机当对方的主机,只要连接成功,便启动通信线程,开始不停检查是否有可接受的数据,通信模块又包括两个子模块:数据接收模块和数据发送模块,聊天信息与传输文件信息由不同的头标识符标识,当数据发送模块发送文件信息(文件的标题,大小)给对方时,对方的数据接收模块接受到传输文件的信息,开启传输文件线程,由另一个专
34、门为传输文件设定的套接字负责传输文件数据。4.3 体系结构设计通常的通信工具,都采用客户机/服务器(C/S)体系结构,C/S结构是这样的一种结构:这种体系结构模式是以数据库服务器为中心、以客户机为网络基础、在信息系统软件支持下 的两层结构模型。这种体系结构中,用户操作模块布置在客户机上,数据存储在服务器上的数据库中。客户机依靠服务器获得所需要的网络资源,而服务器为客户机 提供网络必须的资源。目前大多数信息系统是采用ClientServer结构。CS体系结构根据系统规模需要相应的硬件配置,一般建立在小范围网络环境上,局域网之间再通过专门服务器提供连接和数据交换服务。CS程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。CS体系结构系统部署代价与信息点的多少成正比,可用于开发小型信息系统。 CS一般面向相对固定的用户群