局域网即时通讯工具的设计与实现
PS:等有空了,放源码讲解吧。。。。
目录
2.1WPF(Windows Presentation Foundation)
1.引言
1.1课题背景及意义
互联网的蓬勃兴起,促进了基于因特网的即时通讯技术的迅速发展。自1998年以来,即时通讯行业发展迅速,其功能日益丰富。如今即时通讯已经发展成一种综合化信息平台,实现终端联网的即时通讯服务[1]。即时通讯是在因特网上扩展会话和分散通信方式的实例[2]。但作为社交工具[3],部分即时通讯软件并不满足有特定需求的用户群体,如对内部网络和Internet的接入有严格限制的用户。部分主流即时通讯软件存在如下问题:①广告等无关信息的不断推送;②对Internet网络的极度依赖;③基本功能之外的扩展功能庞多[4]。而局域网即时通讯工具能有效地解决上述问题[5],有效地提高网络资源利用率。
1.2发展现状
1.2.1产品同质化的现象严重
腾讯QQ,最开始是通过模仿ICQ起步的。在随后的发展中,通过不断创新,逐步成长起来,甚至超越了ICQ已有的成就,在我国即时通讯市场占有率达到了第一。这种效应模式也被后来许多公司模仿,但部分公司通常会直接模仿,而不进行创新。所以目前,我国即时通讯市场上的软件同质化程度高[6]。
1.2.2产品定位不够精准
目前,我国的即时通讯软件大部分属于娱乐为主,功能为辅的类型。开发出的应用功能,基本上都是为娱乐服务的。由于市场化经济的刺激,使得很多通讯工具的功能为了体现新颖,目的是为了吸引用户下载使用。但是,由于目前即时通讯工具庞杂,各类新颖的功能也层出不穷,使得许多功能不适用于用户群体,导致功能虽然看上去新颖,但是明显觉得多余,甚至是由于某些新颖的功能,而让用户放弃使用[7]。
1.3系统目标
1.3.1显示主机名称及IP地址
在程序启动时,使用Winsock获取本机主机名称及MAC地址,将信息封装到UDP数据包中,每两秒在局域网中广播一次。局域网内的其他主机通过解析广播包,获取到本机的名称、MAC地址和IP地址。然后在系统的主界面能够显示局域网中其它已经安装并运行该工具的主机名称和IP地址,使用MAC地址标记各主机的昵称。同时,可以和其它主机进行文字聊天。
1.3.2收发文件、发送实时图像及发送录音
任何一台主机可以和其它主机进行收发文件,包括但不限于WORD、PPT、ZIP等文件格式。其次,实现类似QQ的实时截图功能。通过获取整个屏幕图片,利用鼠标选取特定区域,向选定主机发送。同时,通过调用winmm.dll中的mciSendString方法实现录音功能,点击录制语音,可发送给选定的主机。
1.3.3历史记录和下线刷新
保留与其它主机的通信信息,通过将历史记转换成特定格式存储到数据库,以达到保存历史记录到本地的功能。在系统下次启动后,用户能查阅之前的历史记录,也可以选择清空历史记录。但清空记录并不删除已经接受的文件和截图。
1.4运行环境及开发语言
1.4.2开发运行环境的
本系统是一个面向中小型企业机构,满足内部通讯需要的局域网即时通讯系统。开发此系统所需的基本软、硬件环境为:
(1).操作系统:Windows XP 64bit、Windows 7 64bit及Windows 8等其它64位操作系统
(2) 内存:2G以上内存
(3) 处理器:Intel Pentium PIII或更高处理器。
(4) 通讯网络:局域网
1.4.3系统开发语言
本系统使用C#语言在VS2012平台上开发。C#是基于C/C++的面向对象的编程语言。它的主要优点:一是具有优异的快速开发能力,二是支持面向对象的方法[8]。
2.相关开发技术
2.1WPF(Windows Presentation Foundation)
WPF是为.NET框架设计的全新的软件界面显示系统。为了方便软件开发人员使用该系统的功能,微软提供了一个编程类库。这个编程类库具有以下四点特性:1、对用户界面功能更广泛的支持和融合。2、声明式脚本语言的引入与正式支持。3、更简单的安装与配置4、更新的文字排版支持[9]。
同时,比较基于GDI的图形界面程序拥有以下优越的特性:1、显示图形的设备无关性。2、更高的画面精度。3、对界面重叠的更好的处理。4、WPF显示使用了硬件加速。5、通过脚本控制界面执行效果。6、WPF的可移植性[9]。
2.2C/S模式
直接或间接地通过网络协议与其他计算机进行通信,是网络编程的目的。其的基本模型是客户机/服务器模型(Client/Server Model,简称C/S模式)[10]。而C/S模式在实际应用操作过程中采取主动请求方式,在客户进程发出请求完全是随机的,同时,可能有若干个用户请求连接同一个服务器。这就要求服务器具有解决并发请求的能力[11]。
2.3多线程编程技术
2.3.1进程与线程
在Windows系统中,系统具有同时运行若干个程序的能力,而每个运行中的程序就是一个进程。进程是操作系统结构的基础。线程是进程中的一个实体。线程之间的相互制约,会导致线程在运行中呈现出间断性[12]。
2.3.2多线程、线程池
通过运行单个程序来创建多个线程来完成各自的功能,从而提高CPU的利用率。但多线程具有明显缺点:1、线程数量越多,系统内存消耗越大。2、为了管理并协调这些线程,需要CPU花费更多的时间跟踪。3、当线程之间访问共享资源时,可能会导致不可预知的问题。
而线程池,能弥补线程的部分缺点。通过有限固定的少量线程执行大量程序代码,从而减少创建与销毁线程带来的性能开销。通过设置最大并发线程数,解决线程之间访问共享资源的问题。
2.4TCP/UDP协议
UDP(User Datagram Protocol):用户数据包协议,是无连接、不可靠的传输层协议,提供尽力服务但不保证数据的完整性。但相比较于TCP一对一的连接,UDP能提高广播和多播服务。广播(Broadcastinig)使用广播地址255.255.255.255(需要指明接收者的端口号),可以将信息发送到在同一网络内的所有主机。同时为了避免未来瘫痪,路由器不会转发本地广播信息。多播,即对同一网络中部分主机进行了逻辑分组。在数据接收发送时,数据包在网络中传播,分组内的主机会对数据作出响应,而没有被划入这个分组的主机将在数据链路层丢弃这些数据包。
TCP(Transmission Control Protocol):TCP是面向连接的通信协议,所以只能用于端到端的通讯。TCP层将包排序并进行错误检查,同时实现虚拟电路间的连接[13]。
2.5Winsock网络编程
在编程中涉及到网络访问控制的开发人员可直接引用System.Net.Sockets命名空间。该命名空间封装有Winsock(Windows Sockets) 接口的托管实现,。Socket是计算机进行通信的端口,是相关网络应用程序设计中的重要的概念[14]。
在实际编程中,直接使用Socket类,可以获得更多的控制,可以使用不同的协议,不仅包括基于TCP或UDP的协议,还可以自定义自己的协议,更多地控制基于TCP或UDP的协议。接收数据的方法有两种:Socket类的Receive方法和NetworkStream的Read方法,发送数据也有对应的两种方法:Socket类的Send方法和NetworkStream的Wtire方法[15]。
NetworkStream类能保证用户发送的数据,在不需要用户管理的情况下,自动地全部发送到TCP缓冲区,大大简化了编程工作,同时还提供了许多实用的属性和方法,所以在实际编程中,应用的较多。
3.系统需求分析
3.1系统总体需求分析
本系统是一个局域网内的即时通讯工具,根据毕业设计需求,本系统将分为五个系统:1、简单文字聊天子系统,在局域网中选择同样安装本系统的用户,可以一对一发送简单的文字信息。2、文件传输子系统,将文件转化成文件比特流,传输到选定的用户,再转化还原成文件。3、仿QQ截图子系统,捕捉并显示整个屏幕的图像,通过相应的鼠标事件,可以选取图像的部分,发送给选定的用户。4、简单录音子系统,点击录制语音信息,可发送给选定的用户。5、历史信息存储子系统,记录与每个用户的聊天信息(包括文字信息、文件、截图),形成相应的记录存储在数据库SQLite中。本系统的功能类似飞鸽传书软件。在设计系统界面时,按照简洁、直观的特点安排,在编程时应充分考虑UDP(User Datagram Protocol)及TCP(Transmission Control Protocol)的优缺点,实现局域网内用户之间沟通便捷,资源共享快速。
3.2系统流程图
3.2.1发送端流程图
图3-1是发送端主机发送信息的流程图。在启动程序时,会根据局域网中的广播报文生成相应的用户主机列表。选择需要聊天的主机,根据传输的信息不同,转换成相应的比特流并封装,然后发送给目标主机。
图3-1 发送端业务流程图
3.2.2接收端流程图
图3-2是接收端主机接收信息的流程图。在启动程序时,根据广播信息生成相应的用户主机列表。接收到数据并作分析处理。根据信息类型的不同,生成相应的记录并显示在对应的地方。其中文件信息,需要用户判断是否接受。若不接受,将舍弃。若接受,则做与其他类型相似的处理。