ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:36.33KB ,
资源ID:8572271      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8572271.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Socket网络聊天系统开发与设计方案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Socket网络聊天系统开发与设计方案.docx

1、Socket网络聊天系统开发与设计方案封面作者:PanHongliang仅供个人学习基于Socket的网络聊天系统开发与设计摘 要近年来随着计算机技术的飞速发展,特别是Internet技术的发展,已经深刻的改变到了人们生活的方方面面。这时过去的种种陈旧的通讯方式,都已经不能满足现代生活的需要。人们希望能够用更低廉的价格,更加方便快捷的方式,来实现即时通讯。这时开发一套基于Internet技术的网络聊天系统变得尤为重要。本人以基于Java语言开发的网络聊天系统为实践基础,详细的介绍了聊天系统的功能设计和界面逻辑结构。最终实现了一个可以实现私聊、群聊、传送文件的网络聊天系统。本次设计主要以Sock

2、et网络通讯作为基础,并以Object作为通讯载体,同时运用了一定的通讯协议知识开发完成。在界面方面,采用的是Java中的Swing技术来实现。为了实现多用户的连接,在服务器端将采用多线程的技术来实现。关键词:JavaSocket通讯协议Swing多线程Socket-based web chat system development and designAbstractRecent years, with the rapid development of computer technology, especially Internet technology, has profound chan

3、ge to all aspects of peoples lives. At this time all the old past, means of communication, have been unable to meet the needs of modern life. People want to use more low cost, more convenient and efficient way to achieve real-time communications. Then develop a network based on Internet technology,

4、chat system becomes particularly important. I developed Java-based chat system based on practice, detailed description of the chat function of the system design and interface, logical structure. Ultimately can achieve a whisper, group chat, send files online chat system. This design mostly Socket ne

5、twork communication as the basis, and with Object as the communication carrier, while the use of a certain protocol to complete the knowledge development. In the interface, the use of the Java in the Swing technologies. To achieve multi-user connection, the server will use the technology to implemen

6、t multithreading.Keywords:JavaSocket Communication protocol Swing Multithreading一.绪论1.1 课题背景Internet是目前世界上最大的计算机互联网络,它遍布全球,并将世界各地不同规模和大小的网络连接成为一个整体。目前基于Internet的应用已经非常多了,例如网上收发邮件、网上购物、网上看电影等等。这些应用无不在改变人们的生活传统生活方式。目前人们进行信息交流的方式非常多,例如电报、电话、电子邮件等通讯手段。但是这些都存在不便利或者费用方面的问题,例如电子邮件,虽然费用不高,甚至可以免费使用,但是无法实现即时通

7、讯,只能作为一种辅助交流的通讯手段。这时开发一套网络聊天系统变得尤为重要,通过该系统不但能够实现点对点的交流,还能够实现多人同时聊天,并且可以相互传递文件资料。最主要的是,它的费用非常低廉,信息处理速度快,这样人们才能在这个活动的社会中加强联系,从而创建出更多的财富和价值。1.2 课题研究内容及意义目前已有的一些网络聊天系统已经非常多了,例如腾讯的QQ,网易的泡泡等等。这些网络聊天系统已经非常成熟了,不过它们都要求用户必须连接互联网才能够进行通信。目前有很多公司,由于保密公司并不会让员工连入互联网,所以这些软件都将无法使用。这是就需要开发一款能够在公司局域网中使用的聊天系统,并实现公司内部员工

8、的通讯和交流。该系统分为服务器端和客户端两个不同的程序,其中服务器端需要运行在公司的服务器上,而客户端需要部署到公司员工的机器上。这样员工只需要打开客户端并登录到服务器,就可以与局域网上的其他员工彼此之间发送信息,并传送资料了。本课题主要研究的是基于Socket的聊天软件,此聊天软件分为服务器程序和客户端程序,本课题的目标是能实现用户在客户端与服务器端传递信息。主要研究开发内容是:熟悉系统开发平台,探索在此开发平台下,利用Socket编程技术、多线程开发技术、TCP/IP协议等进行聊天软件的实际开发。具体要实现的目标如下:(1) 实现用户的注册、登陆、修改信息等功能 (2) 实现点对点的通信,

9、即私聊(3) 实现一对多的通信,即群聊 (4) 实现点对点的文件传输 。1.3 系统相关技术介绍1.3.1 Java语言概述Java语言是目前流行的一种网络编程语言,它的面向对象、跨平台和分布应用等特点给编程人员带来一种崭新的计算概念,使WWW由最初的单纯提供静态信息发展到现在的提供各种各样的动态服务。Java不仅能够编写嵌入网页中具有声音和动画功能的小应用程序,而且还能够应用于独立的大中型应用程序,其强大的网络功能可以把整个Internet作为一个统一的运行平台,极大地拓展了传统单机或Client/Server模式应用程序的外延和内涵。从1995年正式问世以来,Java逐步从一种单纯的高级编

10、程语言发展为一种重要的Internet开发平台,并进而引发带动了Java产业的发展和壮大,成为当今计算机业界不可忽视的力量和重要的发展潮流与方向。(1)Java语言的起源最早Java语言的出现是源于独立开发平台语言的需要,当时人们希望能编写出嵌入到各种家用电器等设备的芯片上、且易于维护的程序。它的出现是为了弥补当时的编程语言,例如C、C+等只能对特定的CPU芯片进行编译的缺陷。Java的设计者们就大胆设想让更换芯片的电器还是能够正确运行,无需重新编译芯片,因此Sun公司于1990年成立了由James Gosling领导的开发小组,开始致力于开发一种可移植的、跨平台的语言,该语言能生成正确运行于

11、各种操作系统、各种CPU芯片上的代码。经过他们的精心钻研和努力,便促成了Java语言的诞生。(2)Java语言的发展前景在2005年的Java One开发者大会上,James Gosling做了题为“Java技术下一个10年贡献”的演讲,James Gosling认为,Java技术提高了计算的“流动性”,就如同货币的发明提高了商品的流动性一样。无所不在的网络丰富了每个人的信息量,就如同可以兑换的货币产生了财富一样。由于从前的网络速度是很慢的,所以计算被束缚在特定的计算机上,而这种情况将一去不复返了。目前,全球Java开发人员已经超过450万,因此Java社区是一个充满活力和创新精神的团队,这正

12、是Java更加繁荣的保障。为了保持Java的增长和推进Java社区的参与,Sun在Java One开发者大会上宣布开放Java核心源代码,以鼓励更多的人参与到社团活动中来,这是Sun为推进社团发展和维护Java技术兼容性而迈出的重要一步,同时也是Java技术在创新和社会进步上继续发挥重要作用的标志。随着Java的开源,在未来的十年里,Java的应用范围将变得更广。数字媒体将是Java的下一个目标,同时,Java将教育和健康作为未来Java发展过程中的两大重点应用领域。(3)Java的语法Java是面向对象的程序设计语言,其基本语法和C语言大致相同。从一定角度上讲,C语言加上面向对象功能就是C+

13、。那么Java与C+有什么区别呢?简要地说,Java改进了C+的一些缺点,并增加了一些新的功能,从而变得比C+更加简单、易学,编写出来的程序也更具健壮性。下面就对它们进行一个简单的比较。Java去掉了C语言的指针。如指针使用得当,对增强程序的功能有很大帮助,一旦使用不当,经常会导致死机。Java没有了C语言中的预处理器。如#ifdef、#define、常量声明等都不使用了,当然也少了#include命令,从而也没有头文件(.h文件)。和C+相比,Java不支持多继承的概念,目的是为了避免对象和对象之间的关系复杂化。Java增加了垃圾回收机制、异常处理和新的限定词等功能。这些几乎全部都是基于整个

14、系统和程序本身安全性的考虑。不论在何种平台上,Java基本数据类型的大小是不变的。1.3.2TCP/IP协议TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议/互联网络协议,该协议是Internet最基本的协议,简单地说,就是由底层的IP协议和TCP协议组成的。TCP/IP协议的开发工作始于70年代,是用于互联网的第一套协议。 (1)TCP/IP参考模型 TCP/IP协议的开发研制人员将Internet分为五个层次,以便于理解,它也称为互联网分层模型或互联网分层参考模型,如下所示:物理层:对应于网络的基本硬

15、件,这也是Internet物理构成,即我们可以看得见的硬设备,如PC机、互连网服务器、网络设备等,必须对这些硬设备的电气特性作一个规范,使这些设备都能够互相连接幷兼容使用。 网络接口层:它定义了将资料组成正确帧的规程和在网络中传输帧的规程,帧是指一串资料,它是资料在网络中传输的单位。 互联网层:本层定义了互联网中传输的“信息包”格式,以及从一个用户通过一个或多个路由器到最终目标的信息包转发机制。 传输层:为两个用户进程之间建立、管理和拆除可靠而又有效的端到端连接。 应用层:它定义了应用程序使用互联网的规程。 (2)网间协议IP Internet 上使用的一个关键的底层协议是网际协议,通常称IP

16、协议。我们利用一个共同遵守的通信协议,从而使 Internet 成为一个允许连接不同类型的计算机和不同操作系统的网络。要使两台计算机彼此之间进行通信,必须使两台计算机使用同一种语言。通信协议正像两台计算机交换信息所使用的共同语言,它规定了通信双方在通信中所应共同遵守的约定。 计算机的通信协议精确地定义了计算机在彼此通信过程的所有细节。例如,每台计算机发送的信息格式和含义,在什么情况下应发送规定的特殊信息,以及接收方的计算机应做出哪些应答等等。 网际协议IP协议提供了能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只要可以从一个地点向另一个地点传送二进制数据,就可以使

17、用IP协议加入 Internet 了。 如果希望能在 Internet 上进行交流和通信,则每台连上 Internet 的计算机都必须遵守IP协议。为此使用 Internet 的每台计算机都必须运行IP软件,以便时刻准备发送或接收信息。 IP协议对于网络通信有着重要的意义:网络中的计算机通过安装IP软件,使许许多多的局域网络构成了一个庞大而又严密的通信系统。从而使 Internet 看起来好象是真实存在的,但实际上它是一种幷不存在的虚拟网络,只不过是利用IP协议把全世界上所有愿意接入 Internet 的计算机局域网络连接起来,使得它们彼此之间都能够通信。 (3)传输控制协议TCP 尽管计算机

18、通过安装IP软件,从而保证了计算机之间可以发送和接收资料,但IP协议还不能解决资料分组在传输过程中可能出现的问题。因此,若要解决可能出现的问题,连上 Internet 的计算机还需要安装TCP协议来提供可靠的幷且无差错的通信服务。 TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接、发送和接收资料以及终止连接。 传输控制协议TCP协议利用重发技术和拥塞控制机制,向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化。即使在 Internet 暂时出现堵塞的情况下,TCP也能够保证通信的可靠

19、。 众所周知, Internet 是一个庞大的国际性网络,网络上的拥挤和空闲时间总是交替不定的,加上传送的距离也远近不同,所以传输资料所用时间也会变化不定。TCP协议具有自动调整超时值的功能,能很好地适应 Internet 上各种各样的变化,确保传输数值的正确。 因此,从上面我们可以了解到:IP协议只保证计算机能发送和接收分组资料,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。 综上所述,虽然IP和TCP这两个协议的功能不尽相同,也可以分开单独使用,但它们是在同一时期作为一个协议来设计的,幷且在功能上也是互补的。只有两者的结合,才能保证 Internet 在复杂的环境下正常

20、运行。凡是要连接到 Internet 的计算机,都必须同时安装和使用这两个协议,因此在实际中常把这两个协议统称作TCP/IP协议。1.3.3Socket编程Socket 接口是访问 Internet 使用得最广泛的方法。 如果你有一台刚配好TCP/IP协议的主机,其IP地址是202.120.127.201, 此时在另一台主机或同一台主机上执行ftp 202.120.127.201,显然无法建立连接。因202.120.127.201 这台主机没有运行FTP服务软件。同样, 在另一台或同一台主机上运行浏览软件 如Netscape,输入,也无法建立连接。现在,如果在这台主机上运行一个FTP服务软件(

21、该软件将打开一个Socket, 并将其绑定到21端口),再在这台主机上运行一个Web 服务软件(该软件将打开另一个Socket,并将其绑定到80端口)。这样,在另一台主机或同一台主机上执行ftp 202.120.127.201,FTP客户软件将通过21端口来呼叫主机上由FTP 服务软件提供的Socket,与其建立连接并对话。而在netscape中输入时,将通过80端口来呼叫主机上由Web服务软件提供的Socket,与其建 立连接并对话。 在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不

22、同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。在Java中所谓Socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,

23、操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。重要的Socket API:.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法可以参见JDK-1.3文档。Accept方法用于产生阻塞,直到接受到一个连接,并且返回一个客户端的Socket对象实例。阻塞是一个术语,它使程序运行暂时停留在这个地方,直到一个会话产生,然后程序继续;通常阻塞是由循环产生的。 g

24、etInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。 getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。 注意:其中getInputStream和getOutputStream方法均可能会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。 服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完

25、成会话后,关闭连接。 客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O

26、,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。1.3.4Swing简介Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。AWT设计的初衷是支持开发小应用程序的简单用户界面。例如AWT缺少

27、剪贴板、打印支持、键盘导航等特性,而且原来的AWT甚至不包括弹出式菜单或滚动窗格等基本元素。此外AWT还存在着严重的缺陷,人们使AWT适应基于继承的、具有很大伸缩性的事件模型,基于同位体的体系结构也成为其致命的弱点。随着发展的需要,Swing出现了,Swing组件几乎都是轻量组件,与重量组件相比,没有本地的对等组件,不像重量组件要在它们自己的本地不透明窗体中绘制,轻量组件在它们的重量组件的窗口中绘制。这一讲我们讲一下基本的Swing组件使用方法和使用Swing组件创建用户界面的初步方法。Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级( light-weight)

28、组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。Swing采用了一种MVC的设计范式,即模型-视图-控制(Model-View-Controller),其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。Swing外观感觉采用可插入的外观感觉(Pluggable Look and Feel,PL&F)在AWT组件中,由于控制组件外观的对等类与具体平台相关,使得AWT组件总是只有与本

29、机相关的外观。Swing使得程序在一个平台上运行时能够有不同的外观。用户可以选择自己习惯的外观。1.3.5多线程技术介绍多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关

30、心它,只需要设想各个线程是同时执行即可。多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题。(1)在Java中实现多线程。我们不妨设想,为了创建一个新的线程,我们需要做些什么?很显然,我们必须指明这个线程所要执行的代码,而这就是在Java中实现多线程我们所需要做的一切!真是神奇!Java是如何做到这一点的?通过类!作为一个完全面向对象的语言,Java提供了类java.lang.Thread来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程,我们以后的讨论都将围绕这个类进行。那么如何提

31、供给 Java 我们要线程执行的代码呢?让我们来看一看 Thread 类。Thread 类最重要的方法是run(),它为Thread类的方法start()所调用,提供我们的线程所要执行的代码。为了指定我们自己的代码,只需要覆盖它!方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个例子:public class MyThread extends Thread int count= 1, number。 public MyThread(int num) number = num。 System.ou

32、t.println (创建线程 + number)。 public void run() while(true) System.out.println(线程 + number + :计数 + count)。 if(+count= 6) return。 public static void main(String args) for(int i = 0。 i 5。 i+) new MyThread(i+1).start()。 这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果我们的类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread 类,这时如果我们又不想建立一个新的类,应该怎么办呢? 我们不妨来探索一种新的方法:我们不创建Thread类的子类,而是直接使用它,那么我们只能将我们的方法作为参数传递给 Thread 类的实例,有点类似回调函数

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1