第8章Java网络编程基础课件.ppt

上传人:春哥&#****71; 文档编号:12722776 上传时间:2022-04-25 格式:PPT 页数:19 大小:324KB
返回 下载 相关 举报
第8章Java网络编程基础课件.ppt_第1页
第1页 / 共19页
第8章Java网络编程基础课件.ppt_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《第8章Java网络编程基础课件.ppt》由会员分享,可在线阅读,更多相关《第8章Java网络编程基础课件.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第8章章 Java网络编程基础网络编程基础 u 8.1【案例【案例24】获取】获取IP地址地址u 8.2【案例【案例25】网络聊天工具】网络聊天工具u 8.1【案例【案例24】获取】获取IP地址地址1计算机网络基础知识计算机网络基础知识(1)什么是)什么是Internet:因特网(:因特网(Internet)是目前世界上最大的计算机网络,)是目前世界上最大的计算机网络,更确切的说它是一个互连的网络,几乎覆盖了整个世界范围。最初组建这个更确切的说它是一个互连的网络,几乎覆盖了整个世界范围。最初组建这个网络的目的是为方便世界各地的研究部门和大学的研究者及其学生探讨学术网络的目的是为方便世界各地的

2、研究部门和大学的研究者及其学生探讨学术方面的问题,因此也可以称之为科研教育网或国际学术网。方面的问题,因此也可以称之为科研教育网或国际学术网。20世纪世纪90年代后,年代后,因特网开始向社会开放,利用该网络开展商贸活动成为热门话题。大量人力因特网开始向社会开放,利用该网络开展商贸活动成为热门话题。大量人力和财力的投入,使得因特网得到迅速的发展。许多企业也逐步意识到进入因和财力的投入,使得因特网得到迅速的发展。许多企业也逐步意识到进入因特网的重要性,不仅可以从网上索取大量的商业信息,更可以通过因特网向特网的重要性,不仅可以从网上索取大量的商业信息,更可以通过因特网向国际社会展现和推销自己。国际社

3、会展现和推销自己。单纯的把单纯的把Internet看成是一个计算机网络,或者是相互连接的计算机网络群,看成是一个计算机网络,或者是相互连接的计算机网络群,都不是十分正确的。根据当今的观点,计算机网络只是一个提供了简单的传都不是十分正确的。根据当今的观点,计算机网络只是一个提供了简单的传载信息的媒体,而载信息的媒体,而Internet的优越性和实用性则在于信息而不是网络。的优越性和实用性则在于信息而不是网络。Internet采用一种唯一通用的地址格式,为采用一种唯一通用的地址格式,为Internet中的每一个网络和几乎每中的每一个网络和几乎每一台主机都分配了一个地址,就像一个实实在在的整体。一台

4、主机都分配了一个地址,就像一个实实在在的整体。Internet中地址类型中地址类型有有IP地址和域名地址两种。地址和域名地址两种。IP地址是连接在地址是连接在Internet上的每台计算机都有的一个唯一的地址。发送方计算上的每台计算机都有的一个唯一的地址。发送方计算机在通信之前必须知道接收方计算机的地址。这和日常邮寄普通信件是一样机在通信之前必须知道接收方计算机的地址。这和日常邮寄普通信件是一样的道理。只是的道理。只是Internet上使用的地址称为上使用的地址称为Internet地址,简称地址,简称IP地址。它是四地址。它是四个以小数点隔开的十进制整数,每个整数的范围是个以小数点隔开的十进制

5、整数,每个整数的范围是0255。Internet上的每上的每一台计算机和路由器都有一个由相关的管理机构指定的一台计算机和路由器都有一个由相关的管理机构指定的IP地址。计算机用四地址。计算机用四个字节的二进制单位个字节的二进制单位(32位位)存储存储IP地址,每个整数对应一个字节。例如,有一地址,每个整数对应一个字节。例如,有一台计算机的台计算机的IP地址为地址为142.7.1.3,而另一台计算机的,而另一台计算机的IP地址为地址为126.12.3.20。IP地址分为以下五类:地址分为以下五类:A类(类(A Class):):0.0.0.0127.255.255.255适用于大型网络适用于大型网

6、络B类(类(B Class):):128.0.0.0191.255.255.255适用于中型网络适用于中型网络C类(类(C Class):):192.0.0.0223.255.255.255适用于小型网络适用于小型网络D类和类和E类:保留作特殊用途。类:保留作特殊用途。域名抵制由于域名抵制由于IP地址是数字型的,不方便记忆,也难以理解,所以地址是数字型的,不方便记忆,也难以理解,所以Internet采采用了另一套字符的地址方案,即域名地址。它是用具有一定意义的字符串来用了另一套字符的地址方案,即域名地址。它是用具有一定意义的字符串来标识主机地址,标识主机地址,IP与域名地址两者相互对应,而且保

7、持全网统一。在网络中,与域名地址两者相互对应,而且保持全网统一。在网络中,一台主机的一台主机的IP地址是唯一的,即每台主机只能有一个地址是唯一的,即每台主机只能有一个IP地址,但它的域名数地址,但它的域名数却可以有多个。却可以有多个。第一级域名往往表示主机所属的国家、地区或网络性质的代码,如中国是第一级域名往往表示主机所属的国家、地区或网络性质的代码,如中国是cn、英国是英国是uk、商业组织的代码则是、商业组织的代码则是com等。第二、三级是子域名,第四级是主等。第二、三级是子域名,第四级是主机名。机名。在中国,一级域名为在中国,一级域名为cn,二级域名有:教育,二级域名有:教育edu、电信网

8、、电信网net、科研网、科研网ca、团、团体体or、政府、政府go、商业、商业co、军队、军队mi等。各省则采用其拼音缩写,如等。各省则采用其拼音缩写,如bj代表北京,代表北京,sh代表上海,代表上海,ah则代表安徽。则代表安徽。由于由于Internet主要是在美国发展壮大的,所以美国的主机其第一级域名一般直主要是在美国发展壮大的,所以美国的主机其第一级域名一般直接说明其主机性质,而不是国家代码。如果用户看到某主机的第一级域名为接说明其主机性质,而不是国家代码。如果用户看到某主机的第一级域名为com、edu、gov等,一般可以判断这台主机置于美国。因为其他国家第一级等,一般可以判断这台主机置于

9、美国。因为其他国家第一级域名一般是其国家的代码。域名一般是其国家的代码。(2)TCP/IP协议:协议:TCP/IP是是Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议的简写,中文译名为传输控制协议/互联网络协议,是互联网络协议,是Internet最基本的最基本的协议,简单地说,就是由底层的协议,简单地说,就是由底层的IP协议和协议和TCP协议组成的。协议组成的。TCP/IP协议的开发工协议的开发工作始于作始于20世纪世纪70年代,是用于互联网的第一套协议。年代,是用于互联网的第一套协议。IP协议是因特网中的基础协议,由

10、协议是因特网中的基础协议,由IP协议控制传输的协议单元称为协议控制传输的协议单元称为IP数据报。数据报。IP数据报中含有发数据报中含有发/收方的收方的IP地址。地址。IP提供不可靠的、尽力的、无连接的数据报投递提供不可靠的、尽力的、无连接的数据报投递服务,构成了因特网数据传输的基础;以此为基础,服务,构成了因特网数据传输的基础;以此为基础,TCP协议软件增加了确认协议软件增加了确认重发、滑动窗口和复用重发、滑动窗口和复用/解复用等机制,提供面向连接的、可靠的、流投递服务。解复用等机制,提供面向连接的、可靠的、流投递服务。Internet没有形成之前,各个地方已经建立了很多小型的网络,称为局域网

11、,没有形成之前,各个地方已经建立了很多小型的网络,称为局域网,Internet的中文意义是的中文意义是“网际网网际网”,它实际上就是将全球各地的局域网连接起来,它实际上就是将全球各地的局域网连接起来而形成的一个而形成的一个“网之间的网(即网际网)网之间的网(即网际网)”。然而,在连接之前的各式各样的局。然而,在连接之前的各式各样的局域网却存在不同的网络结构和数据传输规则,将这些小网连接起来后各网之间要域网却存在不同的网络结构和数据传输规则,将这些小网连接起来后各网之间要通过什么样的规则来传输数据呢?这就象世界上有很多个国家,各个国家的人说通过什么样的规则来传输数据呢?这就象世界上有很多个国家,

12、各个国家的人说各自的语言,世界上任意两个人要怎样才能互相沟通呢?如果全世界的人都能够各自的语言,世界上任意两个人要怎样才能互相沟通呢?如果全世界的人都能够说同一种语言(即世界语),这个问题不就解决了吗?说同一种语言(即世界语),这个问题不就解决了吗?TCP/IP协议正是协议正是Internet上的上的“世界语世界语”。(3)通信端口:一般来说,一台计算机只通过一条线路连接到网络上。但是,)通信端口:一般来说,一台计算机只通过一条线路连接到网络上。但是,一台计算机中往往有很多应用程序需要进行网络通信。那么网络如何进行区分呢?一台计算机中往往有很多应用程序需要进行网络通信。那么网络如何进行区分呢?

13、使用网络端口号(使用网络端口号(port)可以解决这个问题。端口号是一个标记计算机逻辑通信)可以解决这个问题。端口号是一个标记计算机逻辑通信信道的正整数,端口号不是物理实体。信道的正整数,端口号不是物理实体。IP地址和端口号组成了所谓的地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的最后终结点,它是是网络上运行的程序之间双向通信链路的最后终结点,它是TCP和和UDP协协议的基础。议的基础。IP协议使用协议使用IP地址使数据投递到正确的计算机上,地址使数据投递到正确的计算机上,TCP和和UDP协议使用端口号将协议使用端口号将数据投递给正确的应用程序。数据投递

14、给正确的应用程序。端口号是用一个端口号是用一个16位的整数来表达的,其范围为位的整数来表达的,其范围为065535,其中,其中01023为系统为系统所保留,专门用于那些通用的服务。例如,所保留,专门用于那些通用的服务。例如,http服务的端口号为服务的端口号为80,telnet服务服务的端口号为的端口号为21,ftp服务的端口为服务的端口为23等。因此,在编写网络通信程序时,应当选择等。因此,在编写网络通信程序时,应当选择一个大于一个大于1023的数作为端口号,以免发生冲突。的数作为端口号,以免发生冲突。(4)URL:URL是统一资源定位符(是统一资源定位符(Uniform Resource

15、Locator)的简称,它)的简称,它表示表示Internet上某一资源的地址。上某一资源的地址。Internet上的资源包括上的资源包括HTML文件、图像文件、文件、图像文件、声音文件、动画文件以及其他任何内容(并不完全是文件,也可以是一个对数据声音文件、动画文件以及其他任何内容(并不完全是文件,也可以是一个对数据库的查询等)。通过库的查询等)。通过URL就可以访问就可以访问Internet。浏览器或其他程序通过解析给定。浏览器或其他程序通过解析给定的的URL,就可以在网络上查找相应的文件或其他资源。,就可以在网络上查找相应的文件或其他资源。一个一个URL包括协议名称和资源名称两部分内容,中

16、间用冒号隔开,其格式如包括协议名称和资源名称两部分内容,中间用冒号隔开,其格式如下。下。例如,例如,http:/协议名称指的就是获取资源时所使用的应用层协议,如协议名称指的就是获取资源时所使用的应用层协议,如http,ftp,file等;资等;资源名称则是资源的完整地址,包括主机名、端口号、文件名或文件内部的一源名称则是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。当然,并不是所有的个引用。当然,并不是所有的URL都必须包含这些内容。都必须包含这些内容。一个完整一个完整URL的格式如下。的格式如下。2使用使用URL类编程类编程Java语言的网络编程分为语言的网络编程分为3个层

17、次:面向应用层的个层次:面向应用层的URL类、面向类、面向IP层的层的InetAddress类和面向类和面向TCP协议的协议的Socket类。类。通过通过URL类编程,类编程,Java程序可以直接送出或读入网络上的数据。在程序可以直接送出或读入网络上的数据。在Java的网的网络类库中,络类库中,.URL类和类和.URLConnection类使编程员很方便地类使编程员很方便地利用利用URL在在Internet上进行网络通信。上进行网络通信。协议名协议名:/资源名资源名协议协议:/主机域名(或主机域名(或IP地址)地址)/端口号端口号/目录文件名目录文件名/HTML参考点参考点(1)创建)创建UR

18、L类的对象:创建类的对象:创建URL类的构造方法有以下类的构造方法有以下4种。种。URL(String s1,String s2,int port,String s3)其中,参数其中,参数s1是协议的类型,例如,是协议的类型,例如,http、ftp、file等;参数等;参数s2是主机名;参数是主机名;参数port是指定端口号;参数是指定端口号;参数s3是文件名或路径名。是文件名或路径名。URL(String s1,String s2,String s3)其中,参数含义与第一种构造方法的相同,只是没有指定的端口号,而是使用默其中,参数含义与第一种构造方法的相同,只是没有指定的端口号,而是使用默认

19、端口号。认端口号。URL(URL url,String s)其中,参数其中,参数url为已经创建的为已经创建的URL类对象,参数类对象,参数s是相对路径。是相对路径。URL(String s)使用使用URL字符串构造一个字符串构造一个URL类对象。类对象。当创建当创建URL类的对象时,如果发生错误,系统会产生异常类的对象时,如果发生错误,系统会产生异常MalformedURLException,必须在程序中使用异常处理方法进行处理。例如,必须在程序中使用异常处理方法进行处理。例如,下面的语句创建了下面的语句创建了2个个URL类对象类对象 URL url1,url2;try url1=new U

20、RL(http:/ url2=new URL(url1,myText.txt);catch(MalformedURLException e)(2)URL类的方法:一个类的方法:一个URL对象生成后,其属性是不能被改变的,但可以对象生成后,其属性是不能被改变的,但可以通过通过URL类的方法来获取这些属性。下面这些方法的返回值均为类的方法来获取这些属性。下面这些方法的返回值均为String类型。类型。getProtocol()方法:返回方法:返回URL类对象的协议名。类对象的协议名。getHost()方法:返回方法:返回URL类对象的主机名。类对象的主机名。getPort()方法:返回方法:返回U

21、RL类对象的端口号。类对象的端口号。getPath()方法:返回方法:返回URL类对象的文件路径。类对象的文件路径。getFile()方法:返回方法:返回URL类对象的文件名。类对象的文件名。getRef()方法:返回方法:返回URL类对象在文件中的相对位置。类对象在文件中的相对位置。getQuery()方法:返回方法:返回URL类对象的查询名。类对象的查询名。toExternalForm()方法:返回代表方法:返回代表URL类对象的字符串。类对象的字符串。3InetAddress编程编程InetAddress类可以用于标识网络上的硬件资源,它提供了一系列方法以描述、类可以用于标识网络上的硬件

22、资源,它提供了一系列方法以描述、获取及使用网络资源。每个获取及使用网络资源。每个InetAddress对象包含了对象包含了IP地址、主机名等信息。地址、主机名等信息。InetAddress类没有构造方法,因此不能用类没有构造方法,因此不能用new来构造一个来构造一个InetAddress类对类对象。通常是用类中的静态方法来获取信息。常用的静态方法有以下象。通常是用类中的静态方法来获取信息。常用的静态方法有以下3个。个。InetAddress getByName(String host)方法:返回方法:返回host所代表的网址的所代表的网址的IP地地址。址。host可以是计算机名,也可以是可以是

23、计算机名,也可以是IP地址或地址或DSN域名。域名。InetAddress getLocalHost()方法:返回本机方法:返回本机IP地址。地址。InetAddress getAllByName(String host)方法:返回所有方法:返回所有host代表的网址代表的网址的的IP地址。地址。以上以上3个方法通常会产生个方法通常会产生UnknownHostException异常,应在程序中捕获处异常,应在程序中捕获处理。理。InetAddress类的常用实例方法有以下类的常用实例方法有以下3个。个。getAddress()方法:返回调用该方法对象的方法:返回调用该方法对象的Interner

24、t地址。返回值为以网络地址。返回值为以网络字节为顺序的字节为顺序的byte类型数组,该数组共有类型数组,该数组共有4个元素。个元素。getHostAddress()方法:返回与方法:返回与InetAddress对象相关的主机地址的字符串。对象相关的主机地址的字符串。getHostName()方法:返回与方法:返回与InetAddress对象相关的主机名的字符串。对象相关的主机名的字符串。4Socket类和类和ServerSocket类类Socket通信属于网络底层通信。通信属于网络底层通信。Socket最先应用于最先应用于Unix操作系统,如果了解操作系统,如果了解Unix系统的输入系统的输入

25、/输出(输出(I/O),就很容易掌握),就很容易掌握Socket,因为,因为Socket数据传输数据传输其实就是一种特殊的其实就是一种特殊的I/O。Socket是网络上运行的两个程序间双向通讯的一端。它既可以接受请求,也是网络上运行的两个程序间双向通讯的一端。它既可以接受请求,也可以发送请求,利用它可以很方便地进行网络数据传递。可以发送请求,利用它可以很方便地进行网络数据传递。在在Java语言中,可以将语言中,可以将Socket类和类和ServerSocket类分别用于客户端和服务类分别用于客户端和服务器端,在任意两台机器间建立连接。这两个类都保存在器端,在任意两台机器间建立连接。这两个类都保

26、存在包中,所以在包中,所以在使用前要先导入使用前要先导入包。此外,在创建包。此外,在创建socket时如果发生错误,将产生时如果发生错误,将产生IOException类异常,因此在程序中必须处理创建类异常,因此在程序中必须处理创建Socket类对象或类对象或ServerSocket类对象时有可能产生的异常。类对象时有可能产生的异常。(1)Socket类:通常一个类:通常一个Socket类对象由一个类对象由一个IP地址和一个端口号来确定。地址和一个端口号来确定。常用的常用的Socket类构造方法有以下类构造方法有以下2种。种。其中,参数其中,参数address、host和和port分别是双向连接

27、中另一方的分别是双向连接中另一方的IP地址、主机地址、主机名和端口号。名和端口号。例如:例如:在构造完在构造完Socket类之后,就可以通过类之后,就可以通过Socket类来创建输入输出流,然后通过流来类来创建输入输出流,然后通过流来传送数据了。传送数据了。Socekt类中有两个常用方法:一个是类中有两个常用方法:一个是getInputStream()方法,用来方法,用来获取一个输入流,客户端的获取一个输入流,客户端的Socket对象获取的输入流就是服务器端发出的数据流;对象获取的输入流就是服务器端发出的数据流;另一个是另一个是getOutputStream()方法,用来获取一个输出流,客户端

28、的方法,用来获取一个输出流,客户端的Socket对象对象获取的输出流就是将要发送到服务器端的数据流。获取的输出流就是将要发送到服务器端的数据流。Socket(String host,int port)Socket(InetAddress address,int port)Socket client=new Socket(192.168.1.10.,8189);(2)ServerSocket类:类:ServerSocket类用在服务器端,用于接受客户端传类用在服务器端,用于接受客户端传送的数据。送的数据。Server类的构造方法有以下类的构造方法有以下2个。个。其中,参数其中,参数port为端口

29、号,为端口号,time为监听时间的长度。为监听时间的长度。5在在Java语言中实现语言中实现Client/Server设计过程设计过程Socket通常用来实现通常用来实现Client/Server设计过程,也就是前面所讲的客户端和服设计过程,也就是前面所讲的客户端和服务器端。所谓务器端。所谓Client/Server,是指通信双方一方作为服务器(,是指通信双方一方作为服务器(Server)等待)等待客户(客户(Client)提出请求并予以响应。客户则在需要服务时向服务器提出申请。)提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请

30、求,就会服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时继续监听服务端口,使其他客户的请启动一个服务进程来响应该客户,同时继续监听服务端口,使其他客户的请求也能及时得到处理。一般连接过程是:求也能及时得到处理。一般连接过程是:Server端端Listen(监听)某个(监听)某个prot(端口)是否有连接请求,(端口)是否有连接请求,Client端向端向Server端发出端发出Connect(连接)请求,(连接)请求,Server端向端向Client端发回端发回Accept(接受)消息,一个连接就建立起来了。(接受)消息,一个连接就建立起来了。

31、Server端和端和Client端都可以通过端都可以通过Send、Write等方法与对方通信。等方法与对方通信。ServerSocket(int port)ServerSocket(int port,int time)在在Java语言中,要实现使用语言中,要实现使用Socket通信,需要以下两大步骤。通信,需要以下两大步骤。(1)建立服务器端:首先,在服务器端,通过创建)建立服务器端:首先,在服务器端,通过创建ServerSocket类对象,类对象,来创建服务器对象,其格式如下。来创建服务器对象,其格式如下。格式:格式:然后,通过调用然后,通过调用accept()方法创建一个方法创建一个Soc

32、ket对象,其格式如下。服务器端对象,其格式如下。服务器端可以利用这个可以利用这个Socket对象与客户端进行通讯。对象与客户端进行通讯。格式:格式:紧接着用下面语句得到输入流和输出流,其中紧接着用下面语句得到输入流和输出流,其中in为输入流,为输入流,out为输出流。为输出流。随后,就可以使用随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。同请求进行回应。在所有通信结束后,应该关闭输

33、入流和输出流,释放系统资源。关闭的顺序在所有通信结束后,应该关闭输入流和输出流,释放系统资源。关闭的顺序是先关闭输入流和输出流,然后再关闭是先关闭输入流和输出流,然后再关闭Socket,调用的方法均为,调用的方法均为close()方法方法。ServerSocket 服务器对象名服务器对象名=new ServerSocket(端口号端口号);Socket 对象名对象名=服务器对象名服务器对象名.accept();BufferedReader in=new BufferedReader(new InputStreamReader(Socket对象名对象名. getInputStream();Pri

34、ntWriter out=new PrintWriter(Socket对象名对象名.getOutputStream(),true);例如,下面的语句创建了一个完整的服务器端。例如,下面的语句创建了一个完整的服务器端。(2)建立客户端:与建立服务器端相比,客户端要简单一些,客户端只需用)建立客户端:与建立服务器端相比,客户端要简单一些,客户端只需用服务器所在机器的服务器所在机器的IP以及服务器的端口作为参数创建一个以及服务器的端口作为参数创建一个Socket类对象。得类对象。得到这个对象后,就可以用前面介绍的方法实现数据的输入和输出。到这个对象后,就可以用前面介绍的方法实现数据的输入和输出。Se

35、rverSocket theServer=new ServerSocket(8189);Socket theSocket=theServer.accept();BufferedReader in;PrintWriter out;in=new BufferedReader(new InputStreamReader(theSocket.getInputStream();out=new PrintWriter(new OutputStreamWriter(theSocket.getOutputStream(), true);String str=in.readLine(); /读取客户端的输入读取

36、客户端的输入out.println(str); /将变量将变量str的内容发送到客户端的内容发送到客户端in.close();out.close();theSocket.close();例如,下面的程序代码创建了一个例如,下面的程序代码创建了一个Socket类对象类对象client,client连接到连接到IP地址地址为为192.168.1.10的主机上的端口为的主机上的端口为8189的服务器,并且建立了输入流和输出的服务器,并且建立了输入流和输出流,分别对应服务器的输出和客户端的输入。流,分别对应服务器的输出和客户端的输入。此外,还需要创建客户端的图形用户界面,读者可以利用前面讲解的知识,此

37、外,还需要创建客户端的图形用户界面,读者可以利用前面讲解的知识,根据自己的喜好建立自己的用户界面。根据自己的喜好建立自己的用户界面。Socket client=new Socket(192.168.1.10,8189);BufferedReader in;PrintWriter out;in=new BufferedReader(new InputStreamReader(client.getInputStream();out=new PrintWriter(client.getOutputStream(),true);u 8.2【案例【案例25】网络聊天工具】网络聊天工具1设计过程原理设计过

38、程原理首先介绍首先介绍“网络聊天工具网络聊天工具”程序的设计原理,然后讲解程序所涉及的程序的设计原理,然后讲解程序所涉及的4个类的个类的功能和之间的联系。功能和之间的联系。前面编写的前面编写的ServerApp程序和程序和ClientApp程序只是实现了服务器和客户端一对程序只是实现了服务器和客户端一对一的连接。在实际的网络环境中,一个服务器同一时间只对一个用户服务是一的连接。在实际的网络环境中,一个服务器同一时间只对一个用户服务是不可行的。一个优秀的网络服务程序除了能处理用户的输入信息,还必须能不可行的。一个优秀的网络服务程序除了能处理用户的输入信息,还必须能够同时响应多个客户端的连接请求。

39、够同时响应多个客户端的连接请求。此外,网络最重要的一个特点就是信息共享,所以服务器必须具有主动向所此外,网络最重要的一个特点就是信息共享,所以服务器必须具有主动向所有的客户端广播消息的功能。同时一个客户端也可以向其他客户端发布消息。有的客户端广播消息的功能。同时一个客户端也可以向其他客户端发布消息。“网络聊天工具网络聊天工具”程序恰恰实现了上述两个网络编程的特点。程序恰恰实现了上述两个网络编程的特点。“网络聊天工网络聊天工具具”程序的设计原理是:服务器程序监听一端口,等待客户接入;同时构造程序的设计原理是:服务器程序监听一端口,等待客户接入;同时构造一个线程类,准备接管对该客户的服务。当一个客

40、户端连接了服务器后,创一个线程类,准备接管对该客户的服务。当一个客户端连接了服务器后,创建一个线程类对象,专门处理这个客户端与服务器之间的信息传递,然后主建一个线程类对象,专门处理这个客户端与服务器之间的信息传递,然后主程序继续监听端口。当一个客户端向服务器发送信息后,服务器将这个信息程序继续监听端口。当一个客户端向服务器发送信息后,服务器将这个信息传递给所有连接的客户端,从而实现信息共享。传递给所有连接的客户端,从而实现信息共享。2设计过程方法设计过程方法在实际编程中,将编写在实际编程中,将编写4个类来实现个类来实现“网络聊天工具网络聊天工具”程序。程序。(1)ChatServer类:类:C

41、hatServer类用来建立服务器端,其类用来建立服务器端,其IP地址为运行该地址为运行该程序的计算机的地址,端口为程序的计算机的地址,端口为8189。设定该服务器只能够处理。设定该服务器只能够处理10个线程,也个线程,也就是说只能同时有就是说只能同时有10个人在线聊天。个人在线聊天。ChatHandler类型数组类型数组chatters用来保用来保存当前运行的线程。当有客户端与服务器连接后,存当前运行的线程。当有客户端与服务器连接后,ChatServer类会创建一个类会创建一个ChatHandler类对象与该客户端对应,并将该类对象与该客户端对应,并将该ChatHandler类对象添加到类对

42、象添加到chatters数组中。当有客户端与服务器断开时,将与该客户端对应的数组中。当有客户端与服务器断开时,将与该客户端对应的ChatHandler类对象从类对象从chatters数组除去。数组除去。ChatServer类的类的broadcastMeesage()方法用来将获取的信息发送给所有连接的客户端。方法用来将获取的信息发送给所有连接的客户端。returnUsernameList()方法用来返回所有连接的客户端的用户名。方法用来返回所有连接的客户端的用户名。(2)ChatHandler类:类:ChatHandler类用来处理其对应客户端与服务器之间类用来处理其对应客户端与服务器之间的通

43、信,也就是一个线程。的通信,也就是一个线程。ChatHandler类必须继承类必须继承Thread类。类。ChatHandler类具体功能是将服务器发送的信息传递到其对应的客户端,同类具体功能是将服务器发送的信息传递到其对应的客户端,同时也把客户端发送的信息传递给服务器。时也把客户端发送的信息传递给服务器。(3)ChatClient类:类:ChatClient类用来建立客户端。首先在类用来建立客户端。首先在createComponents()方法中创建客户端的图形用户界面。当用户单击【连接】方法中创建客户端的图形用户界面。当用户单击【连接】按钮时,调用按钮时,调用connectToServer

44、()方法创建客户端。当用户单击【断开】按钮时,方法创建客户端。当用户单击【断开】按钮时,调用调用disconnectFromServer()方法,关闭客户端。方法,关闭客户端。(4)Message类:为了方便地判断服务器和客户端发送的信息的类别,创建了类:为了方便地判断服务器和客户端发送的信息的类别,创建了Message类来对信息进行处理。类来对信息进行处理。Message类的作用是将信息截取为两部分,分号类的作用是将信息截取为两部分,分号之前的部分为信息的类别,这部分信息是通过程序代码加入的,它只用来进行信之前的部分为信息的类别,这部分信息是通过程序代码加入的,它只用来进行信息识别,而不会显

45、示在聊天信息中。分号之后的部分为实际要显示的内容。具体息识别,而不会显示在聊天信息中。分号之后的部分为实际要显示的内容。具体的设置如下。的设置如下。USER:表示其分号后的信息为申请连接的客户端,也就是申请加入聊天室的用:表示其分号后的信息为申请连接的客户端,也就是申请加入聊天室的用户。户。MESSAGE:表示其分号后的信息为服务器或客户端发送的信息。:表示其分号后的信息为服务器或客户端发送的信息。LIST:表示其分号后的信息为当前连接的客户端,也就是当前在线聊天的用户名。:表示其分号后的信息为当前连接的客户端,也就是当前在线聊天的用户名。JOIN:表示其分号后的信息为新连接的客户端,也就是新

46、加入到聊天室的用户名。:表示其分号后的信息为新连接的客户端,也就是新加入到聊天室的用户名。LEAVE:表示其分号后的信息为与服务器断开的客户端,也就是离开聊天室的用:表示其分号后的信息为与服务器断开的客户端,也就是离开聊天室的用户。户。REMOVE:表示其分号后的信息为需要从数组:表示其分号后的信息为需要从数组chatters中除去的客户端。中除去的客户端。此外,此外,“收到收到”表示服务器收到的信息,表示服务器收到的信息,“发布信息发布信息”表示服务器向所有客表示服务器向所有客户端发出的信息。例如,户端发出的信息。例如,READ=USER:xins表示用户名为表示用户名为xins的客户端申请的客户端申请建立连接;建立连接;broadCastMessage =JOIN :xins表示向所有连接的客户端发送表示向所有连接的客户端发送消息,用户名为消息,用户名为xins的客户端建立了与服务器的连接。的客户端建立了与服务器的连接。为了帮助读者理解程序的运行过程,所有这些消息都会显示在为了帮助读者理解程序的运行过程,所有这些消息都会显示在“命令提示符命令提示符”窗口中。客户端的图形用户界面则只显示程序的运行效果。窗口中。客户端的图形用户界面则只显示程序的运行效果。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁