局域网内即时通信工具的开发毕业设计(论文)word格式.doc
-
资源ID:4023644
资源大小:505.50KB
全文页数:35页
- 资源格式: DOC
下载积分:8金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
局域网内即时通信工具的开发毕业设计(论文)word格式.doc
本科毕业设计(2009届)题 目局域网内即时通信工具的开发学 院计算机学院专 业网络工程班 级050521学 号05052113学生姓名韩寅指导教师徐翀完成日期2009年6月诚 信 承 诺我谨在此承诺:本人所写的毕业论文局域网内即时通信工具的开发均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担。 承诺人(签名): 年 月 日摘 要本毕业论文课题主要研究局域网内即时通信工具的开发。我们根据其体系结构与设计原理开发出了界面简洁、方便易用的即时通信工具。它的主要功能有:一对一聊天,文件传输,远程桌面控制。在该即时通信工具中,传输都用到了TCP/IP协议,客户端之间采用的是P2P技术进行通信。本文首先概述了即时通信工具的背景,其次介绍了软件开发的环境和开发技术和开发工具,给出了软件系统的架构,然后详细地介绍了该即时通信工具的设计实现,最后对系统进行了简单的测试。关键词:即时通信;P2P;TCP/IPABSTRACTThe main topic of this thesis is the research of the development of LAN instant messaging tools. According to its architecture and design principle, we developed a user-concise, easy-to-use instant messaging tool. There are many features are shown as follow: one-on-one chat, file transfer and remote desktop control. In the instant messaging tool,the transfer use the TCP/IP,the client is based on the P2P technology for communication.The paper first describes the background of instant messaging tools, and then introduces the software development environment and the development of technology and development tools, given the structure of software systems, then presents the design of real-time communication tools to achieve in detail. At the end of the paper is the system simple test.Keywords:instant messaging;P2P;TCP/IP目 录1 引言12 概述22.1 背景22.2 即时通信的概念和特点32.3 系统需求42.4 即时通信工具的应用42.5 即时通信工具要解决的问题43 工具介绍63.1 NETBEANS IDE63.2 JAVA DEVELOPMENT KIT63.3 P2P技术介绍73.4 P2P模式与C/S模式对比83.5 TCP/IP结构体系93.6 WINDOWS SOCKETS103.7 WINDOWS API114 概要设计134.1 系统整体设计134.2 系统结构图134.3 网络通信程序设计过程134.4 各界面模块功能实现145 系统详细设计165.1 登入模块165.2 主界面165.4 聊天模块175.4 文件传输模块195.5 远程桌面控制模块245.6 测试总结276 设计心得28致谢29参考文献301 引言要问到网络时代发展最快的领域,无疑的,答案是即时通信。即时通信工具的实时交互、资费低廉等优点深受用户的喜爱,已经成为网络生活中不可或缺的一部分,比如大家都很熟悉的腾讯QQ,MSN等。网民们通过即时通信进行沟通交流、结识新朋友、娱乐消遣时间、实现异地文字、语音、视频的实时互通交流。同时,人们也认识到即时信息工具能够带来极高的生产力,诸多企事业单位借助它的使用,来提高业务协同性及反馈的敏感度和快捷度。作为使用频率最高的网络软件,即时通讯已经突破了作为技术工具的极限,被认为是现代交流方式的象征。即时通信工具应该强调的是即时性。P2P技术的优点就在于其非中心性,每个用户都是平等的,都可以作为服务器,所以不会存在会有服务器堵塞的可能。而且网络上每个机子都可能是消息转发点,也使得消息的发送更加安全1。随着网络和计算机应用的逐步深入,很多企、事业单位都实现了日常办公的信息化、网络化,在网络中传输的数据信息也不再局限于部门内部的局域网络,而是通过公网,跨部门、跨区域的进行传输。未来的企业网将会更大范围地延伸,甚至无处不在,其速度、移动性、安全性和无时无刻的服务应用成为了新应用关注的焦点。目前,很多企业在工作中已经采用了即时通信软件、邮件、协同工作软件等各种网络应用软件来提高工作效率。2 概述2.1 背景21世纪是网络的时代,是信息的时代,是多媒体的时代。Internet技术的迅猛发展与普及,推动了世界范围的信息传输和信息交流。随着Internet的发展,Internet将提供越来越多的服务。就目前而言,网民使用较多的主要有以下服务:电子邮件(E-mail),文件传输(网络通讯),远程登录(Telnet),万维网(World Wide Web),新闻组(Newsgroup/Usenet)和电子公告牌(BBS),聊天系统(Chat)等。Internet如此流行,其中网络通讯功不可没。成千上万的数据、软件分布在世界各地,有了网络通讯,足不出户,只要敲几个字,就能轻而易举地得到想要的。目前全世界已有1000多个网络通讯文件服务器对所有Internet用户开放,用户可以通过与Internet相连的计算机,把自己需要的文件传过来。现在,许多互联网站点都建立了可供大众访问的资料库,这些资料都可以通过网络通讯获取。即时通信在发展初期以其娱乐性引起了人们广泛的关注,但是现在其快速增长的企业用户表明这一技术已开始融入现代商务活动中。为适应新的经济竞争环境,现代企业的沟通越来越快,对效率的要求也越来越高,特别是企业内部团队工作中的协调沟通必须即刻达成,否则将影响项目的整体推进,也难以迅速应对瞬息变化的市场需求。目前,越来越多的国内外企业开始关注企业级即时通信产品,它们看中的是其降低交流成本、提高沟通效率的优势。跨越物理空间的距离、实现即时交流是即时通信系统最吸引企业之处。据美国著名调查公司Garnter调.查显示,在2008年以后,企业即时通信产品将以350%的速度飞速增长,可以说,企业即时通信具有广泛的发展前景。为了保障通信安全,建设内网、专网是一个解决这一问题的方法,但是随着企业业务范围的不断扩大,网络规模也在扩大,采用该方案的话,成本的代价必然非常高。由于公众信息网是对整个社会开放的公众基础网络,具有覆盖范围广、速度快、费用低、使用方便等特点,但同时也存在着安全性差的问题。用户通过公众信息网传输的信息,在传输过程中可能被窃取、篡改和伪造,信息的安全性和可靠性因此大大降低了。习惯了通过类似ICQ、QQ、MSN之类的程序和天南海北的朋友聊天、发信息,不过所有聊天程序都需要Internet的支持,而无法在局域网内部大显身手,那么是否想到过要让单位内部的员工,寝室周围的同学,不用上Internet就可以轻松体验到内网聊天的快乐呢?有了这种想法,开发局域网聊天程序就有了必要性,让单位员工或寝室同学不出内网就能自由聊天2。本软件是一个的即时通信工具。通过该网络程序的编制和实践,对自己所学习的知识进行一次综合和提高,有更深层次的理解和掌握,在这过程中激发自己学习的潜力,提高软件开发的能力,加深对网络协议和windows环境下网络编程的理解和掌握。2.2 即时通信的概念和特点即时通信(IM)是一个允许两人或多人使用网络即时地传递文字讯息、档案、语音与视频交流的终端服务。即时通讯不同于e-mail在于它的交谈是即时的。大部分的即时通讯服务提供了presence awareness的特性显示联络人名单,联络人是否在在线与能否与联络人交谈。在早期的即时通讯程序中,使用者输入的每一个字符都会即时显示在双方的荧幕,且每一个字符的删除与修改都会即时的反应在荧幕上。这种模式比起使用e-mail更像是电话交谈,充分体现了其实时特性。在现在的即时通信程序中,为了画面的完整美观和交流方便,交谈中的另一方通常只会在本地端按下送出键后才会看到讯息。即时通信工具自1998年面世以来,特别是近几年的迅速发展,即时通信的功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。即时通信不再是一个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。即时通信技术是P2P技术的一项重要应用,随着互联网的发展,人们不再满足于传统的网络交流方式如E-mail,BBS等,因此即时通信系统产生了。即时通信软件的发展突飞猛进,作为一项对传统电信通讯模式构成挑战的新兴科技,改变了人们传统的人际交往及通讯习惯,已经成为电话、电子邮件之外的第三种不可或缺的通讯方式。利用即时通信软件独特的优势来辅助工作,是一种有益的尝试。即时通信软件真正在全球范围内拉近了人与人的距离,无论对于个人用户还是企业用户,都成为一种不可或缺的交流工具。现今的即时通信工具不仅能够实现文字聊天,而且能够在两台计算机之间传送文件以及进行音频和视频等方式的通信。即时通信程序被认为是P2P程序的原因是每个对等点具有与其它对等点进行直接联系的特点。2.3 系统需求1. 硬件系统:奔腾1.0以上CPU、256M以上内存、10G以上硬盘、光驱。2.软件系统:Windows 9x或更高版本。3.开发环境:NetBeans IDE 6.5。4. 开发软件:Java Development Kit。2.4 即时通信工具的应用即时通讯软件的出现正在逐渐改变人们的沟通与交际方式。无论近在咫尺,还是远隔重洋,也只是在键盘和鼠标之间就可以解决问题。即时通讯服务非常适合企业内部或企业和客户之间的交流。而且将即时通讯服务和手机移动等服务结合,将更大地提高工作效率。网络聊天程序越来越影响着我们的网络生活。随着网络和计算机应用的逐步深入,很多企、事业单位都实现了日常办公的信息化、网络化,在网络中传输的数据信息也不再局限于部门内部的局域网络,而是通过公网,跨部门、跨区域的进行传输。未来的企业网将会更大范围地延伸,甚至无处不在,其速度、移动性、安全性和无时无刻的服务应用成为了新应用关注的焦点。目前,很多企业在工作中已经采用了即时通信软件、邮件、协同工作软件等各种网络应用软件来提高工作效率。习惯了通过类似ICQ、QQ、MSN之类的程序和天南海北的朋友聊天、发信息,不过所有聊天程序都需要Internet的支持,而无法在局域网内部“大显身手”,那么是否想到过要让单位内部的员工,寝室周围的同学,不用上Internet就可以轻松体验到内网聊天的快乐,避免来自公共信息的干扰。所以本即时通信工具的开发有一定的实际意义,可以在不能连通Internet时当作企业内部的通信工具。本即时通信工具实现了文字传输、文件传输、远程桌面控制等功能。虽然跟QQ等软件有着很大差距,但是本软件简洁易用,没有必要一定要连接到Internet。2.5 即时通信工具要解决的问题对目前的即时通信工具的分析研究,初步得到我们要解决以下几个主要问题:1.用户感知可以看到在线好友,显示其名字及IP,在某好友下线时在列表中消失。2.点对点即时通信可以一对一聊天,传输文字信息。显示发送信息时间。3.文件传输可以一对一传输文件。大的文件不丢失。4.远程桌面控制可以远程监控对方桌面并用鼠标控制对方。5. 实现完全P2P完全不存在中间服务器,各个客户端间完全平等。3 工具介绍3.1 NetBeans IDENetBeans由Sun公司在2000年创立,它是开放源运动以及开发人员和客户社区的家园,旨在构建世界级的Java IDE。NetBeans当前可以在Solaris、Windows、Linux和Macintosh OS X平台上进行开发,并在SPL(Sun公用许可)范围内使用。NetBeans是一个全功能的开放源码Java IDE,可以帮助开发人员编写、编译、调试和部署Java应用,并将版本控制和XML编辑融入其众多功能之中。NetBeans可支持Java 2平台标准版(J2SE)应用的创建、采用JSP和Servlet的2层Web应用的创建,以及用于2层Web应用的API及软件的核心组的创建。此外,NetBeans最新牒还预装了两个Web服务器,即Tomcat和Glassfish,从而免除了繁琐的配置和安装过程。所有这些都为Java开发人员创造了一个可扩展的开放源多平台的Java IDE,以支持他们在各自所选择的环境中从事开发工作。NetBeans是一个为软件开发者而设计的自由、开放的IDE(集成开发环境),你可以在这里获得许多需要的工具,包括建立桌面应用、企业级应用、WEB开发和JAVA移动应用程序开发、C/C+,甚至Ruby。NetBeans可以非常方便的安装于多种操作系统平台,包括Windows,Linux,Mac OS和Solaris等操作系统3。3.2 Java Development KitJDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK是整个Java的核心,包括了Java运行环境(Java Runtime Environment),一堆Java工具和Java基础的类库。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多4。JDK包含的基本组件包括:javac:编译器,将源程序转成字节码。jar:打包工具,将相关的类文件打包成一个文件。javadoc:文档生成器,从源码注释中提取文档。jdb:debugger,查错工具。java:运行编译后的java程序(.class后缀的)。appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。avap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。Jconsole:Java进行系统调试和监控的工具。3.3 P2P技术介绍P2P是peer-to-peer的缩写,peer在英语里有“(地位、能力等)同等者”、“同事”和“伙伴”等意义。这样一来,P2P也就可以理解为“伙伴对伙伴”的意思,或称为对等联网。目前人们认为其在加强网络上人的交流、文件交换、分布计算等方面大有前途。简单的说,P2P直接将人们联系起来,让人们通过互联网直接交互。P2P使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间商。P2P就是人可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载。P2P另一个重要特点是改变互联网现在的以大网站为中心的状态、重返“非中心化”,并把权力交还给用户。P2P看起来似乎很新,但是正如B2C、B2B是将现实世界中很平常的东西移植到互联网上一样,P2P并不是什么新东西。在现实生活中每天都按照P2P模式面对面地或者通过电话交流和沟通5。即使从网络看,P2P也不是新概念,P2P是互联网整体架构的基础。互联网最基本的协议TCP/IP并没有客户机和服务器的概念,所有的设备都是通讯的平等的一端。在十年之前,所有的互联网上的系统都同时具有服务器和客户机的功能。当然,后来发展的那些架构在TCP/IP之上的软件的确采用了客户机/服务器的结构:浏览器和Web服务器,邮件客户端和邮件服务器。但是,对于服务器来说,它们之间仍然是对等联网的。以email为例,互联网上并没有一个巨大的、唯一的邮件服务器来处理所有的email,而是对等联网的邮件服务器相互协作把email传送到相应的服务器上去。另外用户之间email则一直对等的联络渠道。在过去的5年里,互联网的发展至少从表面上远离了P2P,互联网上绝大部分的节点也不能和其他节点直接地交流。Napster正是唤醒了深藏在互联网背后的对等联网。Napster的文件共享功能在局域网中共享目录也是再平常不过的事情。但是Napster的成功促使人们认识到把这种“对等联网”拓展到整个互联网范围的可能性。当然,在许多人的眼中,Napster并不是纯粹的P2P,它仍然需要一个处于中心协调机制。 事实上,网络上现有的许多服务可以归入P2P的行列。即时讯息系统譬如ICQ、AOL Instant Messenger、Yahoo Pager、微软的MSN Messenger以及国内的OICQ是最流行的P2P应用。它们允许用户互相沟通和交换信息、交换文件。用户之间的信息交流不是直接的,需要有位于中心的服务器来协调。但这些系统并没有诸如搜索这种对于大量信息共享非常重要的功能,这个特征的缺乏可能正 是为什么即时讯息出现很久但是并没有能够产生如Napster这样的影响的原因之一。 另外一个可以归入P2P是拍卖网站譬如eBay,人们在总结eBay的模式的时候用了C2C,是不是和P2P有一点类似?eBay就是一个将人们联系的和交易物品的社区,用户可以方便的搜索其他用户叫卖的商品。eBay提供了一些使得交易得以顺利进行的服务,但是交易是直接在用户之间进行的。如果将“交易”的概念推广,C2C就是P2P的一个特例,这里人们互相交换的是商品。 但如果仔细深究的话,Napster和即时讯息在赋予用户之间直接交流的能力、eBay使用户可以直接交易的同时,却破坏了服务器端的那种自互联网出现之初就存在的对等联网思想,因为它们都需要有一个位于中心的服务器来协调,而不是分布在世界上不同地方的、对等联网的许多服务器。这也正是诸如Gnutella和Freenet不断的宣称它们创造了纯粹的P2P,完全没有中心服务器的P2P服务6。3.4 P2P模式与C/S模式对比传统的C/S结构,如图3-1所示。各种网络服务本身的处理绝大部分集中在服务器上,客户端只做少量的工作。客户端使用某种通讯协议与服务器连接,就可以获得特定的资源和服务。许多的互联网应用,包括WWW、FTP、远程登录、电子邮件都采用这种方式7。客户端服务器客户端客户端客户端客户端客户端图3-1 C/S模式首先,由于服务本身的处理绝大部分集中在服务器上,随着客户数量的增加,服务器的负载和带宽要求也相应的增加,最终导致服务器不能再处理额外的客户请求。其次,因为只有服务器能够提供服务,所以一旦服务器由于某种原因不在线,客户就不能得到服务。再次,客户端的资源得不到充分利用。P2P方式则有着显著的不同,如图3-2,P2P技术正是为了解决C/S模式中遇到的问题,它能让这些孤立的计算机互相提供服务。与C/S模式不同,对等网络计算不依赖于一个中心服务器提供服务。如图3-2所示,它改变了C/S模式的结构,采用平等的结构。对等网络允许间接连接的计算机互相发现,使得这些计算机都可以同时作为服务器与客户机,并能够发现对等网络中的可用服务8。本即时通信工具是一个纯P2P软件,没用用到服务器,这样这个软件能更加方便被应用。客户端客户端客户端客户端图3-2 P2P模式3.5 TCP/IP结构体系3.5.1 TCP/IP简介TCP/IP(Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议/互联网络协议)协议是Internet最基本的协议,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。TCP/IP作为Internet的核心协议,通过近二十多年的发展已日渐成熟,并被广泛应用于局域网和广域网中,目前已成为事实上的国际标准。TCP/IP协议集确立了Internet的技术基础。TCP/IP协议主要作用于OSI网络参考模型中的网络层(第3层)、传输层(第4层)和应用层(第7层)。数据链路层(第2层)的功能主要应用于其它协议如以太网(Ethernet)、ATM、帧中继(Frame Relay),以及多数供应商特定协议等。TCP/IP 充分支持所有通用第2层协议。TCP/IP组中的应用程序通常直接运行于传输层协议TCP或UDP上面,并不需要表示层(第6层)和会话层(第5层)的支持。3.5.2 TCP/IP的特点TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中设计。因此用户一般不涉及。编程时,编程界面有两种形式:一、是由内核心直接提供的系统调用;二、使用以库函数方式提供的各种函数。前者为核内设计,后者为核外设计。用户服务要通过核外的应用程序才能设计,所以要使用套接字(socket)来设计9。即时通信工具中同时用到了TCP和UDP2个传输层协议。3.6 Windows Sockets套接字(Socket),简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。套接字(Socket)被分为两类:流式套接字(Stream Sockets)和数据报套接字(Datagram Sockets)。流式套接字使用传输控制协议(TCP)可以将数据按顺序无重复得发送到目的地,它提供的是一种可靠,面向连接的数据传输方式,不管是对单个的数据报,还是对数据包,流式套接字都提供了一种流式数据传输。数据报套接字使用用户数据包协议(UDP)提供了一种不可靠的、非连接的数据包通信方式。由于不建立连接,数据报协议比连接协议快,但不能保证所有数据都准确有序地到达目的地,不保证顺序性、可靠性和无重复性。尽管Socket(套接字)这个词显得有些神秘,但其实这个概念极易理解。多数网络应用程序使用两个协议:传输控制协议(TCP)和用户数据报协议(UDP)。他们都使用一个端口号以识别应用程序,端口号为主机上所运行的程序所使用的,这样就可以通过号码象名字一样来跟踪每个应用程序。端口号让操作系统更容易的知道有多少个应用程序在使用系统,以及哪些服务有效。理论上,端口号可由每台主机上的管理员自由的分配。但为了更好的通信通常采用一些约定的协议,这些协议能通过端口号识别一个系统向另一个系统所请求的服务的类型。基于如此理由,大多数系统维护一个包含端口号及它们所提供哪些服务的文件。端口号被从1开始分配,通常端口号超出255的部分被本地主机保留为私有用途。1到255之间的号码被用于远程应用程序所请求的进程和网络服务。每个网络通信循环地进出主计算机的TCP应用层。它被两个所连接的号码唯一地识别。这两个号码合起来叫做套接字。组成套接字的这两个号码就是机器的IP地址和TCP软件所使用的端口号。因为网络通讯至少包括两台机器,所以在发送和接收的机器上都存在一个套接字。由于每台机器的IP地址是唯一的,端口号在每台机器中也是唯一的,所以套接字在网络中应该是唯一的。这样的设置能使网络中的两个应用程序完全的基于套接字互相对话。发送和接收的机器维护一个端口表,它列出了所有激活的端口号。两台机器都包括一个进程叫做绑定,这是每个任务的入口,不过在两台机器上恰恰相反。换句话说,如果一台机器的源端口号是23而目的端口号被设置成25,那么另一台机器的源端口号设置成25,目的端口号设置成2310。在本程序中同时用用到了数据报套接字和流式套接字,用UDP协议发送数据报的形式广播上下线信息和回馈在线信息,用TCP协议进行文字传输和文件传输。3.7 Windows APIWindows这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application),所以便称之为 Application Programming Interface,简称API函数当Windows操作系统开始占据主导地位的时候,开发Windows平台下的应用程序成为人们的需要。而在Windows程序设计领域处于发展的初期,Windows程序员所能使用的编程工具唯有API函数,这些函数是Windows提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。所以可以认为API函数是构筑整个Windows框架的基石,在它的下面是Windows的操作系统核心,而它的上面则是所有的华丽的Windows应用程序。但是,没有合适的Windows编程平台,程序员想编写具有Windows风格的软件,必须借助API,API也因此被赋予至高无上的地位。那时的Windows程序开发还是比较复杂的工作,程序员必须熟记一大堆常用的API函数,而且还得对Windows操作系统有深入的了解。然而随着软件技术的不断发展,在Windows平台上出现了很多优秀的可视化编程环境,程序员可以采用“即见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。这些优秀可视化编程环境操作简单、界面友好,在这些工具中提供了大量的类库和各种控件,它们替代了API的神秘功能,事实上这些类库和控件都是构架在WIN32 API函数基础之上的,是封装了的API函数的集合。它们把常用的API函数的组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了Windows应用程序开发的过程。有了这些控件和类库,程序员便可以把主要精力放在程序整体功能的设计上,而不必过于关注技术细节。实际上如果我们要开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数,虽然类库和控件使应用程序的开发简单的多,但它们只提供Windows的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。这也是API函数使用的场合,所以我们对待API函数不必刻意去研究每一个函数的用法,那也是不现实的(能用得到的API函数有几千个呢)。正如某位大虾所说:API不要去学,在需要的时候去查API帮助就足够了。但是,许多API函数令人难以理解,易于误用,还会导致出错,这一切都阻碍了它的推广11。4 概要设计4.1 系统整体设计本程序是采用P2P模式的即时通信工具,所有用户权限都是平等的,没有服务器跟客户端之分。本即时通信工具用JAVA自带的Swing和Awt实现界面,功能方面实现了文字传输、文件传输、远程桌面控制功能。4.2 系统结构图即时通信工具文件传输文字传输远程控制图4-1 系统结构图系统结构如图4-1。4.3 网络通信程序设计过程在调用了Windows sockets的启动函数WSACleanup()之后才能进行其他的Socket系统调用,但启动函数WSAStartup()是为了建立与Windows Sockets DLL的连接,因此在neatbeans中所建立项目设置中的连接的库模块必须进行设置,在其中的link栏内的对象/库模块中加入“Ws2_32.lib”,才能真正建立建立与Windows Sockets DLL的连接。其他的Socket系统调用包括创建Socket、将创建的Socket与本地端口绑定、建立Socket连接服务器、监听是否有连接、请求数据的可控缓冲发送和可控缓冲接收,到最后关闭Socket。首先在服务器方,利用ServerSocket()函数建立流式套接字,返回套接字号s,接着利用Server()函数将套接字s与本地地址绑定,紧接着利用listen()函数通知TCP,监听客户方,服务器准备接收连接,没有连接的话,服务器方通过closesocket()关闭套接字s,服务结束。有连接的话,在客户方,通过socket()函数建立流式套接字s,此时在服务器方,建立连接,通过accept()返回,得到新的套接字ns,客户方通过connect()将套接字s与远程地址连接,此时服务器方/客户方在ns/s上读/写数据,直到交换完成。交换完成后,服务器方/客户方关闭套接字ns/s,最后服务器方通过closesocket()关闭最初套接字s,服务结束12。4.4 各界面模块功能实现4.4.1 登入模块登录模块主要程序是从编辑框中读取用户名信息,然后进入主界面。这里用到了Broadcast,登入的用户广播登入信息,接受到的客户端解包获取信息并用getAddress获取广播客户端的IP地址并测试信息前5位login是登入标识符。在此同时发送在线信息给广播的主机。4.4.2 主界面通过登入时的Broadcast,用户可以在这个界面看到在线好友名字及IP,关于和退出按钮。双击好友可以进入聊天界面,点击关于可以进入本软件简要介绍界面,点击退出可以退出此软件。4.4.3 文字传输模块在主界面双击好友后可以在聊天界面中查看文字信息。这里用到了JDK中的ServerSocket,Socket类。先用ServerSocket监听端口号为6000的端口,等待其他客户端发送文字信息传输请求,有连接请求后,会话产生。接收方获得一个输入流,并创建一个100字节的缓冲速度接收,然后把接收到的信息写到打印界面中。4.4.4 文件传输模块文件传输界面显示发送文件按钮和本机IP。按发送文件按钮后进入另一个界面显示有对方IP,浏览按钮,简短附言文本框,确定按钮,取消按钮。按浏览键在电脑中选择想要传输的文件,按打开选中。在简短附言的文本框中写上附言,最后按确定发送文件。可以建立五个传输链接,若超过五个系统将自动关闭。传输文件时接收方先收到对方的简短附言然后决定是否接受。按接收后会有传输速度和已完成的百分比,完成后会显示传输成功,中途可以中止传输。这里也用到了JDK中的ServerSocket,Socket类,先用ServerSocket监听端口号为5005的端口,等待其他客户端发送文件信息传输请求,有连接请求后,会话产生,接收方获得一个输入流的大小,并创建一个缓冲速度接收。接收方先创建一个空的文件,按断点传输的方式接收,然后把接收到的字节一点一点写入空文件。4.4.5 远程桌面控制模块在聊天界面中有远程控制与远程被控2个按钮,控制方按远程控制按钮进入控制界面,被控方按远程被控按钮进入等待被控界面。然后控制方按快速连接就可以控制对方电脑了。这里用到了JDK中GetPicrequest、MouseListener类。请求被控方先截图并发送到控制方,控制方收到后显示在一个界面中,如图5-13。然后控制方用MouseListener类记录自己鼠标的X,Y值发送到被控方。这样就能实现在对方的界面使用鼠标点击,实现简单的远程控制。5 系统详细设计5.1 登入模块如图5-1所示,登入界面要求在文本框中输入一个用户名,按确定后进入主界面。图5-1 登入界面主要代码:flag = false; str = name.getText(); this.dispose(); login = login + str ; new BroadCastWord(login); /广播登入信息5.2 主界面登入后的主界面如图5-2所示。可以看到在线好友。按关于键进入系统简要介绍界面如图5-3所示。双击好友进入聊天界面。主要代码:message=new String(packet.getData(),0,packet.getLength(); /解包,获取数据报 address = packet.getAddress().getAddress(); /获取接收数据报的源IP地址 ip = (address0 & 0xff) + "." + (address1 & 0xff) + "." + (address2 & 0xff) + "." + (address3 & 0xff); temp = message.substring(6,message.length()+" " +ip;图5-2 主界面图5-3 系统简要介绍界面5.4 聊天模块用户进入聊天模块如图5-4所示,可以在下方文本框内输出消息按发送键发送完成一对一文字传输。按文件传输可以进入文件传输模块,按远程控制可以进入远程控制界面,按远程被控可以进入等待被控制界面。图5-4 即时聊天窗口主要代码:public static void client(String str,String ip) try Socket s=new Socket(ip,6000); OutputStream os=s.getOutputStream(); os.write(str.getBytes(); os.close(); s.close(); catch (Exception ex) ex.printStackTrace(); /发送信息public void run()try InputStream is=s.getInputStream(); byte buf=new byte100; int len=is.read(buf);