Java网络编程_第1页
Java网络编程_第2页
Java网络编程_第3页
Java网络编程_第4页
Java网络编程_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第11章章 网络编程网络编程教学目的要求1.了解网络编程的基本知识;了解网络编程的基本知识; 2.掌握使用掌握使用URL获取网络资源的方法;获取网络资源的方法;3.熟练掌握基于熟练掌握基于TCP的网络通信技术。的网络通信技术。11.1 网络编程的基本概念网络编程的基本概念 Java作为一种与平台无关的语言,从一作为一种与平台无关的语言,从一出现就与网络有关极其密切的关系,因出现就与网络有关极其密切的关系,因为为Java写的程序可以在网络上直接运行,写的程序可以在网络上直接运行,使用使用Java,只需编写简单的代码就能实,只需编写简单的代码就能实现强大的网络功能。下面将介绍几个与现强大的网络功

2、能。下面将介绍几个与Java网络编程有关的概念。网络编程有关的概念。TCP/IP协议概述协议概述 在编写网络通信的在编写网络通信的Java程序时,是在应用层编程序时,是在应用层编写程序的,所以根本不必关心写程序的,所以根本不必关心TCP/IP的层次,的层次,只要用只要用包中的类即可,这些类提供了包中的类即可,这些类提供了系统无关的网络通信服务。但是即使如此,也系统无关的网络通信服务。但是即使如此,也需了解一下需了解一下TCP/IP协议。协议。 确切地说,确切地说,TCP/IP协议是一组包括协议是一组包括TCP协议和协议和IP协议、协议、UDP(User Datagram Protocol)协)

3、协议、议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议族。)协议和其他一些协议的协议族。TCP/IP通信协议采用了通信协议采用了4层的层级结构,每一层的层级结构,每一层都使用它的下一层所提供的网络来完成自己层都使用它的下一层所提供的网络来完成自己的需求。这的需求。这4层分别为:层分别为: 应用层:应用程序间沟通的层,如简单电子邮应用层:应用程序间沟通的层,如简单电子邮件传输(件传输(SMTP)、文件传输协议()、文件传输协议(FTP)、)、网络远程访问协议(网络远程访问协议(Telnet)等。)等。 传输层:在此层中,它提供了节点间的数

4、据传传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(送服务,如传输控制协议(TCP)、用户数据)、用户数据报协议(报协议(UDP)等,)等,TCP和和UDP给数据包加入给数据包加入传输数据并把它传输到下一层中,这一层负责传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。传送数据,并且确定数据已被送达并接收。 互连网络层:负责提供基本的数据封包传送功互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(不检查是否被正确接收),如网际协议(IP)。)。

5、网络接口层:对实际的网络媒体的管理,定义网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如如何使用实际网络(如Ethernet、Serial Line等)等)来传送数据。来传送数据。下面简单介绍下面简单介绍TCP/IP中的几个主要协议的功能。中的几个主要协议的功能。1.IP协议协议 网际协议网际协议IP是是TCP/IP的心脏,也是网络层中最的心脏,也是网络层中最重要的协议。重要的协议。 IP层接收由更低层(网络接口层例如以太网设层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发备驱动程序)发来的数据包,并把该数据包发送到更高层送到更高层TCP或或UDP层;

6、相反,层;相反,IP层也层也把从把从TCP或或UDP层接收来的数据包传送到更低层接收来的数据包传送到更低层。层。IP数据包是不可靠的,因为数据包是不可靠的,因为IP并没有做任并没有做任何事情来确认数据包是按顺序发送的或者没有何事情来确认数据包是按顺序发送的或者没有被破坏。被破坏。IP数据包中含有发送它的主机的地址数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地(源地址)和接收它的主机的地址(目的地址)。址)。2.TCP协议协议 TCP是是Tranfer Control Protocol的简称,的简称,是一种面向连接的保证可靠传输的协议。是一种面向连接的保证可靠传输的协议。通

7、过通过TCP协议传输,得到的是一个顺序协议传输,得到的是一个顺序的无差错的数据流。的无差错的数据流。 如果如果IP数据包中有已经封好的数据包中有已经封好的TCP数据数据包,那么包,那么IP将把它们向将把它们向“上上”传送到传送到TCP层。层。TCP将包排序并进行错误检查,将包排序并进行错误检查,同时实现虚电路间的连接。同时实现虚电路间的连接。TCP数据包数据包中包括序号和确认,所以未按照顺序收中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被到的包可以被排序,而损坏的包可以被重传。重传。 TCP是可靠的、面向连接的、连续的、流的协是可靠的、面向连接的、连续的、流的协议。当应用

8、程序需要一个可靠的、点对点的连议。当应用程序需要一个可靠的、点对点的连接进行通信时,就用接进行通信时,就用TCP协议。像协议。像HTTP、FTP、Telnet等应用程序都需要一个可靠的通等应用程序都需要一个可靠的通信媒介。数据在网络上发送和接收的次序对于信媒介。数据在网络上发送和接收的次序对于能否成功的应用能否成功的应用HTTP读取读取URL资源是很重要资源是很重要的,数据的接收次序与发送的次序必须一样,的,数据的接收次序与发送的次序必须一样,否则就会收到一些错误的信息。否则就会收到一些错误的信息。 对于许多应用程序来说,这种可靠性的保证是对于许多应用程序来说,这种可靠性的保证是能否成功传输信

9、息的关键。然而,这种可靠的能否成功传输信息的关键。然而,这种可靠的传输方式并非对所有的应用程序都适合。事实传输方式并非对所有的应用程序都适合。事实上,上,TCP需要花费大量的时间和带宽来保证可需要花费大量的时间和带宽来保证可靠传输,有一些场合可靠传输并不是必须的。靠传输,有一些场合可靠传输并不是必须的。3.UDP协议协议 UDP是是User Datagram Protocol(用户数据报(用户数据报协议)的简称,是一种无连接的、不可靠的协协议)的简称,是一种无连接的、不可靠的协议,每个数据报都是一个独立的信息,包括完议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何

10、可整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能到达目的地的时间以及内容的正确性都是不能被保证的。但是这个协议的速度却比较快,所被保证的。但是这个协议的速度却比较快,所以在现在网络基础设施越来越好的情况下,使以在现在网络基础设施越来越好的情况下,使用用UDP协议的应用程序也越来越多了。协议的应用程序也越来越多了。 在在 J a v a 的的 j a v a . n e t 类 库 中 ,类 库 中 , U R L 、URLConnection、Socket、SocketServer

11、类都类都是 利 用是 利 用 T C P 在 网 络 上 通 信 的 ; 而在 网 络 上 通 信 的 ; 而DatagramPacket和和DatagramServer类是使用类是使用UDP的。本章将主要讲述利用的。本章将主要讲述利用TCP协议进行通协议进行通信的各个类。信的各个类。Socket套接字套接字 网络上的两个程序通过一个双向的通信连接实现数据网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个的交换,这个双向链路的一端称为一个Socket,即,即Socket是面向客户是面向客户/服务器模型设计的,通常用服务器模型设计的,通常用Socket来实现客户方和

12、服务方的连接。客户程序可以向来实现客户方和服务方的连接。客户程序可以向Socket写请求,服务器将处理此请求,然后通过写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。将结果返回给用户。 Socket通信机制提供了两种通信方式:有连接和无连通信机制提供了两种通信方式:有连接和无连接方式,分别面向不同的应用需求。使用有连接方式接方式,分别面向不同的应用需求。使用有连接方式时,通信链路提供了可靠的,全双工的字节流服务。时,通信链路提供了可靠的,全双工的字节流服务。在该方式下,通信双方必须创建一个连接过程并建立在该方式下,通信双方必须创建一个连接过程并建立一条通信链路,以后的网络通信

13、操作完全在这一对进一条通信链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕则关闭此连接过程。使用无连程之间进行,通信完毕则关闭此连接过程。使用无连接方式时其系统开销比有连接方式小,但通信链路提接方式时其系统开销比有连接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿。在该方式下,通信双方不必创据一定能够到达信宿。在该方式下,通信双方不必创建一个连接过程和建立一条通信链路,网络通信操作建一个连接过程和建立一条通信链路,网络通信操作在不同的主机和进程之间转发进行。在不同的主机和进程之间转发进行。端口端口 计

14、算机与网络一般只有一个单独的物理连接,计算机与网络一般只有一个单独的物理连接,所有的数据最终都要通过连接到达一个指定的所有的数据最终都要通过连接到达一个指定的计算机。然而,数据是传向运行在计算机上的计算机。然而,数据是传向运行在计算机上的不同应用程序的,计算机需要知道数据传向哪不同应用程序的,计算机需要知道数据传向哪个应用程序,这就要用到端口。个应用程序,这就要用到端口。 数据在网络上传送是与地址信息的传送一起进数据在网络上传送是与地址信息的传送一起进行的,地址信息表明了数据要传向的计算机和行的,地址信息表明了数据要传向的计算机和端口。计算机是一个端口。计算机是一个32位的位的IP地址标识,地

15、址标识,IP用用来把数据传送到网络上的目的计算机上。端口来把数据传送到网络上的目的计算机上。端口是用一个是用一个16位的数来表示,位的数来表示,TCP和和UDP都是通都是通过这个端口来指明数据要发往的应用程序。过这个端口来指明数据要发往的应用程序。 在面向连接的通信中,一个应用程序与另一个在面向连接的通信中,一个应用程序与另一个应用程序的连接的建立是通过把一个端口号绑应用程序的连接的建立是通过把一个端口号绑定在套接字上实现的。这样就把应用程序注册定在套接字上实现的。这样就把应用程序注册在操作系统中,从指定的端口接收所有的数据。在操作系统中,从指定的端口接收所有的数据。运行在同一台计算机上的两个

16、应用程序不可能运行在同一台计算机上的两个应用程序不可能绑定在同一个端口上,如果应用程序试图绑定绑定在同一个端口上,如果应用程序试图绑定在一个已经在使用中的端口上将导致失败。在在一个已经在使用中的端口上将导致失败。在面向消息的通信中,数据报包含了目的地的端面向消息的通信中,数据报包含了目的地的端口号。口号。TCP和和UDP协议是利用端口把流入的数协议是利用端口把流入的数据映射到运行的计算机上的特定进程。据映射到运行的计算机上的特定进程。 端口号是从端口号是从0到到65535(因为端口是用(因为端口是用16位二进位二进制数表示),其中制数表示),其中01023的端口号被系统保的端口号被系统保留,它

17、们被许多知名的服务占据,如留,它们被许多知名的服务占据,如HTTP、FTP和其他的系统服务,应用程序不能绑定这和其他的系统服务,应用程序不能绑定这些端口。些端口。URL URL(Uniform Resource Locator)是统一资源定位符)是统一资源定位符的简称,它表明了的简称,它表明了Internet上某一资源的地址。通过上某一资源的地址。通过URL,可以访问,可以访问Internet和和WWW。浏览器通过解析给。浏览器通过解析给定的定的URL可以在网络上查找相应的文件或网络资源。可以在网络上查找相应的文件或网络资源。IP地址定位了在互连网上的一台计算机,端口定义了地址定位了在互连网上

18、的一台计算机,端口定义了为这台计算机上提供的服务。一个为这台计算机上提供的服务。一个URL的语法格式如的语法格式如下:下: :/dir/filename protocol定义了传输协议,如定义了传输协议,如http、ftp、gopher、file等等;等等;hostname为主机域名或为主机域名或IP地址;地址;port为服务端为服务端口号;口号;dir和和filename分别为服务器上的目录和文件名。分别为服务器上的目录和文件名。URL具有强大的功能,它提供了统一的方法来存储与具有强大的功能,它提供了统一的方法来存储与单个类中的一个特定资源进行通信所需的全部信息;单个类中的一个特定资源进行通

19、信所需的全部信息;完成所有完成所有socket的创建、握手协议以及通过的创建、握手协议以及通过HTTP检索检索资源所需的解释程序。资源所需的解释程序。Java语言提供了类语言提供了类.URL来实现利用来实现利用URL进行网进行网络编程。该类具有络编程。该类具有4个构造器及其相应的方法。利用构造个构造器及其相应的方法。利用构造器创建了器创建了URL对象后,对象后,Java提供了提供了2种方式来读取网络数种方式来读取网络数据,一种是通过据,一种是通过URL对象及相关方法直接得到相关的网对象及相关方法直接得到相关的网络信息,首先创建一个络信息,首先创建一个URL对象,然后使用对象,然后使用URL的方

20、法的方法openStream()与指定的与指定的URL建立连接并得到一个输入流建立连接并得到一个输入流InputStream类的对象,在此基础上可进一步生成其它的类的对象,在此基础上可进一步生成其它的输入流对象实例,进而对信息进行操作;这种方法简单输入流对象实例,进而对信息进行操作;这种方法简单直接,但缺乏灵活性,并且只能够读信息,因为许多直接,但缺乏灵活性,并且只能够读信息,因为许多Web提供了双向对话的功能,因而就限制了这种方法的提供了双向对话的功能,因而就限制了这种方法的应用。另一种是通过方法应用。另一种是通过方法openConnection()生成相应的生成相应的URLConnecti

21、on对象,从而得到对象,从而得到InputStream输入流或输入流或InputStream对象,进而对其进行读写操作。这种方法应对象,进而对其进行读写操作。这种方法应用相当广泛,如向服务器的用相当广泛,如向服务器的CGI程序发送一些数据,首程序发送一些数据,首先必须与先必须与URL建立连接,然后对其进行读写操作,利用建立连接,然后对其进行读写操作,利用URLConnection类提供的公用方法除了可以简单地访问类提供的公用方法除了可以简单地访问网络资源外,还可以访问某些协议提供的有关资源,如网络资源外,还可以访问某些协议提供的有关资源,如资源的资源的MIME类型(类型(Multimedia

22、Internet Mail Extensions,多用途,多用途Internet邮件扩展)、资源的更改时邮件扩展)、资源的更改时间等。间等。11.2 使用使用URL获取网络资源获取网络资源 URL类类 在在Java的的包中,包含一些用于网络编包中,包含一些用于网络编程的类,其中程的类,其中URL类可以很方便地利用类可以很方便地利用URL地地址在址在Internet上进行网络通信并获取网络资源。上进行网络通信并获取网络资源。 URL对象是只写一次的对象,一旦创建了一个对象是只写一次的对象,一旦创建了一个URL对象,就不能再改变它的任何属性(协议、对象,就不能再改变它的任何属性(协议、主机名、文件

23、名和端口号)。为了表示主机名、文件名和端口号)。为了表示URL,中实现了类中实现了类URL。可以通过下面的构。可以通过下面的构造方法来初始化一个造方法来初始化一个URL对象:对象:构造方法一:构造方法一:public URL (String spec); 该构造方法通过一个表示该构造方法通过一个表示URL地址的字符串可以构造地址的字符串可以构造一个一个URL对象。例如:对象。例如: URL urlBase=new URL(http:/ ;构造方法二:构造方法二:public URL(URL context, String spec); 该构造方法通过绝对该构造方法通过绝对URL和相对和相对UR

24、L构造一个构造一个URL对对象。例如:象。例如: URL com163 = new URL (http:/ URL index163 = new URL(com163, index.html);构造方法三:构造方法三:public URL(String protocol, String host, String file);例如:例如: URL com163 = new URL(http, , /pages/net. html);构造方法四:构造方法四:public URL(String protocol, String host, int port, String file); 例如:例如:

25、 URL gamelan = new URL(http, , 80, Pages/net.html);注意:类注意:类URL的构造方法都声明抛弃非运行时异的构造方法都声明抛弃非运行时异常(常(MalformedURLException),因此生成),因此生成URL对象时,必须要对这一异常进行处理,通对象时,必须要对这一异常进行处理,通常是用常是用try-catch语句进行捕获。格式如下:语句进行捕获。格式如下:tryURL myURL= new URL()catch (MalformedURLException e) URL类提供了多个方法进行类提供了多个方法进行URL对象的查询,可以使对象的

26、查询,可以使用这些方法来获取用这些方法来获取URL的属性信息,其中常用的方法的属性信息,其中常用的方法有:有:getProtocol():返回:返回URL的协议标识部分;的协议标识部分;getHost():返回:返回URL的主机名部分;的主机名部分;getPort():将端口号作为整数返回,如没有设置则返回:将端口号作为整数返回,如没有设置则返回-1;getPath():返回该:返回该URL的路径;的路径;getFile():返回:返回URL的文件名部分;的文件名部分;getRef():返回:返回URL的引用部分。的引用部分。 当然,并不是所有的当然,并不是所有的URL地址都包括这些组成部分。

27、地址都包括这些组成部分。URL类提供这些方法是因为类提供这些方法是因为HTTP的的URL包括这些部包括这些部分,而分,而HTTP的的URL差不多是最通用的差不多是最通用的URL。从某种。从某种程序上讲,程序上讲,URL类是以类是以HTTP为中心的。无论使用什为中心的。无论使用什么构造函数来创建么构造函数来创建URL对象,都可以使用这些方法来对象,都可以使用这些方法来获取该获取该URL对象的信息。例对象的信息。例11.1描述了描述了URL类的基本类的基本用法。用法。例例 URL类的基本用法举例。类的基本用法举例。import .URL; /引入引入URL类类import .MalformedUR

28、LException; /引入引入包中的异常类包中的异常类class URLDemo public static void main(String args) URL sampleURL = null; try sampleURL = new URL(http:/:80/index.html#down); /创建创建URL对象对象 catch(MalformedURLException e) /异常处理异常处理 e.printStackTrace(); /显示显示sampleURL对象的各属性值对象的各属性值 System.out.println(协议:协议: +sampleURL.getPr

29、otocol(); System.out.println(主机名:主机名:+sampleURL.getHost(); System.out.println(端口号:端口号:+sampleURL.getPort(); System.out.println(文件名:文件名:+sampleURL.getFile(); System.out.println(锚点:锚点: +sampleURL.getRef(); 这是一个这是一个Java应用程序。运行结果输出应用程序。运行结果输出URL地址的各地址的各属性值,因为属性值,因为URL没有参考点,输出为没有参考点,输出为null。运行结。运行结果为:果为:

30、协议:协议: http主机名:主机名:端口号:端口号:80文件名:文件名:/index.html锚点:锚点: down获取图像获取图像 Java Applet可以直接从网络上结点获取图像并可以直接从网络上结点获取图像并显示出来。显示出来。 为了了解其编程方法和从本地显示为了了解其编程方法和从本地显示图像的编程有何不同,先不考虑网络功能,来图像的编程有何不同,先不考虑网络功能,来看一个以前学习过的简单的图像显示的例子:看一个以前学习过的简单的图像显示的例子: 例例11.2 获取并显示图像举例。获取并显示图像举例。import java.applet.*;import java.awt.*;pub

31、lic class Li11_02 extends Applet Image image; public void init() image=getImage(getDocumentBase(),swan.gif); public void paint(Graphics g) g.drawImage(image, 0, 0,this); 这是一个获取并显示图像的简单例子,在该例这是一个获取并显示图像的简单例子,在该例中,先用中,先用getImage()方法从方法从HTML文档所在位文档所在位置调用图像置调用图像swan.gif,并由此生成一个,并由此生成一个Image类类型的对象型的对象ima

32、ge,然后用,然后用drawImage(image,0,0,this)在屏幕上将图像显在屏幕上将图像显示出来。示出来。 如果想从网络上其他结点获取图像,关键是创如果想从网络上其他结点获取图像,关键是创建对应于网络上其他结点的建对应于网络上其他结点的Image类型的对象,类型的对象,一旦获得一旦获得Image类型的对象,便可以对其进行类型的对象,便可以对其进行任何可能的图像操作。任何可能的图像操作。Java提供了提供了getImage(new URL(字符串字符串)方法可以创建对应方法可以创建对应于其他结点的图像于其他结点的图像,其使用格式可有两种:其使用格式可有两种: String url =

33、 结点结点URL; Image image; try image = getImage(new URL(url); catch(Exception e)System.out.println(不能打开这个不能打开这个URL地址地址 ); 或或URL imgur = null;Image image;try imgur = new URL(结点结点URL ); catch (MalformedURLException e) System.out.println(不能打开这个不能打开这个URL地址地址 ); image=getImage(imgur); 前一种格式用前一种格式用“new URL(ur

34、l)”生成生成URL对象,并直对象,并直接作为接作为getImage的参数,后一种格式先用的参数,后一种格式先用“new URL(url)”生成一个生成一个 URL对象,再传给对象,再传给getImage。两。两种格式本质上是一样的。两种格式中,生成种格式本质上是一样的。两种格式中,生成URL对象对象的部分都包含在的部分都包含在try/获取获取URL对象对象 catch (MalformedURLException e) /出错提示出错提示 之中。之中。 例如要调用例如要调用/java/automain.jpg结点结点的图像,第一种格式的完整实现见例的图像

35、,第一种格式的完整实现见例11.3源程序。第源程序。第二种格式的完整实现见例二种格式的完整实现见例11.4的源代码。说明:例的源代码。说明:例11.3至至11.8编译后需要把编译后需要把.class文件和相应的文件和相应的.htm文件放入文件放入站点中的相应虚拟目录才可显示出效果。对于没有服站点中的相应虚拟目录才可显示出效果。对于没有服务器或不能上网的读者,也可以在自己的计算机上通务器或不能上网的读者,也可以在自己的计算机上通过安装微软的过安装微软的IIS或或PWS(Windows98用户)建立一台用户)建立一台WEB服务器进行测试,服务器建立后,把上面的程序服务器进行测试,服务器建立后,把上

36、面的程序放入放入WEB服务器相应目录中,然后把例题中的域名换服务器相应目录中,然后把例题中的域名换成成即可。即可。 例例11.3 显示网络结点上的图像。显示网络结点上的图像。/Li11_03.javaimport java.applet.*;import .*;import java.awt.*;public class Li11_03 extends Applet Image image; public void init() String url=/java/automain.jpg;/请按请按实际情况更改站点的域名实际情

37、况更改站点的域名 try image = getImage(new URL(url); catch(Exception e) public void paint(Graphics g) g.drawImage(image, 0, 0,this); 例例11.4 显示网络结点上的图像。显示网络结点上的图像。/Li11_04.javaimport java.applet.*;import .*;import java.awt.*;public class Li11_04 extends Applet Image image; URL imgur=null; public void init() t

38、ry imgur=new URL(/java/automain.jpg);/请按实请按实际情况更改站点的域名际情况更改站点的域名 catch (MalformedURLException e) System.out.println(不能打开该不能打开该URL地址。地址。); image=getImage(imgur); public void paint(Graphics g) g.drawImage(image, 0, 0,this); 将上述两个程序分别以将上述两个程序分别以Li11_03.java和和Li11_04. java存盘并把存盘并把URL地

39、址更改为自己服务器的图地址更改为自己服务器的图像文件的地址,执行像文件的地址,执行javac Li11_03.java和和javac L i 11 _ 0 4 . j a v a , 将 得 到 编 译 后 生 成 的, 将 得 到 编 译 后 生 成 的Li11_03.class和和Li11_04.class,最后创建调用这,最后创建调用这两个两个Java Applet的的HTML文档。文档。 将将 . c l a s s 和和 . h t m 程 序 放 入程 序 放 入 We b 服 务 器服 务 器()并用并用IE打开,便可以看到打开,便可以看到Java Ap

40、plet 所显示的从网络上获得的图像了。不过,所显示的从网络上获得的图像了。不过,在在Applet程序中一般很少采用绝对程序中一般很少采用绝对URL,因为,因为出于安全性的考虑,浏览器只允许出于安全性的考虑,浏览器只允许Applet访问访问与与Applet同一主机的资源。如果采用绝对同一主机的资源。如果采用绝对URL,则当则当Applet放到其他的放到其他的Web服务器上运行时,服务器上运行时,必须修改程序。必须修改程序。获取声音获取声音 Java从网络上获取声音文件并播放声音的编程从网络上获取声音文件并播放声音的编程方法有两种,第一种是利用方法有两种,第一种是利用Java提供的提供的play

41、(URL1)及及play(URL1,String1) 直接播放网直接播放网络 上 的 声 音 文 件 , 另 一 种 是 通 过络 上 的 声 音 文 件 , 另 一 种 是 通 过getAudioClip(URL)或或getAudioClip(URL, String)先从网络上获取声音文件,并生成先从网络上获取声音文件,并生成AudioClip 类型的对象,然后对该对象进行操类型的对象,然后对该对象进行操作。第一种方法实现可以用如下代码:作。第一种方法实现可以用如下代码:String Audur = 结点结点URL;try play(new URL(Audur); /或或play(new U

42、RL(Audur),声声音文件名音文件名); catch(Exception e) 第二种方法实现可以用如下代码:第二种方法实现可以用如下代码:String Audur = 结点结点URL;AudioClip loopClip;try loopClip = getAudioClip(new URL(Audur); /或或loopClip = getAudioClip(new URL(Audur) ,声音文件名声音文件名); catch(Exception e)System.out.println(不能打开这个不能打开这个URL地址。地址。); 上面的两种格式都是将生成上面的两种格式都是将生成U

43、RL对象部分对象部分“new URL(url)”直接作为直接作为play或或getAudioClip的参数;和前面处理图像的例子一样,也可以的参数;和前面处理图像的例子一样,也可以先用先用“new URL(url)”获取一个获取一个URL对象,再对象,再传给传给 play 或或getAudioClip。如对第一种。如对第一种play(URL)的格式,也可采用如下的编程格式:的格式,也可采用如下的编程格式:URL Audur =null;try Audur=new URL(结点结点URL ); catch(Exception e)System.out.println(不能打开该不能打开该URL地

44、址。地址。);play(Audur);获取文档获取文档 利用利用Java提供的提供的getAppletContext().showDoc ument()方法可以显示方法可以显示Web服务器结点的服务器结点的HTML文档,在调用这个方法之前首先需要指文档,在调用这个方法之前首先需要指定文档的网络资源的定文档的网络资源的URL。其两种格式如下:。其两种格式如下:void showDocument(URL url);void showDocument(URL url, String target); 第一种格式在当前窗口中打开指定的网页文件,第一种格式在当前窗口中打开指定的网页文件,第二种格式在指定

45、的窗口中打开指定的网页文第二种格式在指定的窗口中打开指定的网页文件。同前面的显示网络上其他结点的资源一样,件。同前面的显示网络上其他结点的资源一样,获取文档也有两种编程方式,例获取文档也有两种编程方式,例11.7和例和例11.8分别演示了分别演示了showDocument()方法的使用。方法的使用。 例例11.7 获取并显示网络结点上的文档资源。获取并显示网络结点上的文档资源。import java.applet.*;import java.awt.*;import .*;public class Li11_07 extends Applet URL docur= null; public v

46、oid paint(Graphics g) try docur=new URL(/java/index.htm); /请根据实际情况更改站点域名请根据实际情况更改站点域名 catch (MalformedURLException e) System.out.println(不能打开该不能打开该URL地址。地址。); if (docur != null) getAppletContext().showDocument(docur); 例例11.8 获取并显示网络结点上的文档资源。获取并显示网络结点上的文档资源。import java.applet.*;imp

47、ort java.awt.*;import .*;public class Li11_08 extends Applet URL docur= null; public void paint(Graphics g) try getAppletContext().showDocument(new URL(/java/index.htm); catch (MalformedURLException e) System.out.println(不能打开该不能打开该URL地址。地址。); /paint()上面的两个程序只是利用上面的两个程序只是利用showDocm

48、ent()方法方法显示网上的显示网上的HTML文档,但并不能对其内容文档,但并不能对其内容进行处理。实际上,进行处理。实际上,Java还可以读取网络上还可以读取网络上文件的内容,并对其内容进行处理。文件的内容,并对其内容进行处理。Java读取并处理网络上文件内容的步骤如下:读取并处理网络上文件内容的步骤如下:(1)创建一个创建一个URL类型的对象。例如:类型的对象。例如: URL fileurl = new URL(url);(2)利用利用URL类的类的openStream( )方法获得对应的方法获得对应的InputStream类的对象。例如:类的对象。例如: InputStream file

49、con = fileurl.openStream( );(3)将将InputStream对象转化为对象转化为DataInput Stream类的对象。例如:类的对象。例如: DataInputStream filedata = new DataInputStream(filecon);(4)读取内容并处理。例如,对上面的读取内容并处理。例如,对上面的filedata,可用,可用filedata.readLine一行一一行一行读取内容或用行读取内容或用filedata.readchar一个一个字符一个字符地读取,读取后可使用字符一个字符地读取,读取后可使用java语句对其进行处理并输出。语句对其

50、进行处理并输出。对于读取并处理网上对于读取并处理网上HTML文件内容的文件内容的程序,请读者根据以上说明步骤,自己程序,请读者根据以上说明步骤,自己编写一个小程序。编写一个小程序。11.3 使用使用TCP协议的协议的Socket编程编程 Socket套接字套接字 对于超出了对于超出了URL类所提供的连网应用程序,类所提供的连网应用程序,Java提供了套接口类(提供了套接口类(Socket)和服务套接口)和服务套接口类(类(ServerSocket)作为标准的)作为标准的TCP套接口编套接口编程技术,通过它们可以实现主机与主机之间的程技术,通过它们可以实现主机与主机之间的对话。对话。 使用使用S

51、ocket进行进行Client/Server程序设计的一般程序设计的一般连接过程是这样的:连接过程是这样的:Server端端Listen(监听监听)某个某个端口是否有连接请求,端口是否有连接请求,Client端向端向Server端发端发出出Connect(连接连接)请求,请求,Server端向端向Client端发端发回回Accept(接受)消息,一个连接就建立起来(接受)消息,一个连接就建立起来了。了。Server端和端和Client端都可以通过套接口类端都可以通过套接口类提供的一些方法与对方通信。提供的一些方法与对方通信。 对于一个功能齐全的对于一个功能齐全的Socket,都要包含,都要包含

52、以下基本结构,其工作过程包含以下四以下基本结构,其工作过程包含以下四个基本的步骤:个基本的步骤:1.创建创建Socket;2.打开连接到打开连接到Socket的输入的输入/输出流;输出流;3.按照一定的协议对按照一定的协议对Socket进行读进行读/写操作;写操作;4.关闭关闭Socket。 Java在在包中提供了两个类包中提供了两个类Socket和和ServerSocket,分别用来表示双向连接,分别用来表示双向连接的客户端和服务端创建、管理通信。这的客户端和服务端创建、管理通信。这是两个封装得非常好的类,使用很方便。是两个封装得非常好的类,使用很方便。其构造方法如下:其构造方法如下: So

53、cket(); Socket(InetAddress address, int port); Socket(InetAddress address, int port, boolean stream); Socket(String host, int prot); Socket(String host, int prot, boolean stream); Socket(SocketImpl impl); Socket(String host, int port, InetAddress localAddr, int localPort); Socket(InetAddress address

54、, int port, InetAddress localAddr, int localPort); ServerSocket(); ServerSocket(int port); ServerSocket(int port, int backlog); ServerSocket(int port, int backlog, InetAddress bindAddr); 其中其中address、host和和port分别是双向连分别是双向连接中一方的接中一方的IP地址、主机名和端口号,地址、主机名和端口号,stream指明指明socket是流是流socket还是数据报还是数据报socket,lo

55、calPort表示本地主机的端口号,表示本地主机的端口号,localAddr和和bindAddr是本地机器的地址是本地机器的地址(ServerSocket的主机地址),的主机地址),impl是是s o c k e t 的 父 类 , 既 可 以 用 来 创 建的 父 类 , 既 可 以 用 来 创 建serverSocket又可以用来创建又可以用来创建Socket。例。例如:如:Socket client = new Socket(127.0.01., 8088);ServerSocket server = new ServerSocket(8088); 注意:在选择端口时,必须小心。每一个端

56、口注意:在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。才能获得相应的服务。01023的端口号为系统的端口号为系统所保留,例如所保留,例如http服务的端口号为服务的端口号为80,telnet服服务的端口号为务的端口号为21,ftp服务的端口号为服务的端口号为23, 所以在所以在选择端口号时,最好选择一个大于选择端口号时,最好选择一个大于1023的数以的数以防止发生冲突。防止发生冲突。 在创建在创建socket时如果发生错误 , 将 产 生时如果发生错误 , 将 产 生IOException,在程序中必须对之

57、做出处理。,在程序中必须对之做出处理。所以在创建所以在创建Socket或或ServerSocket是必须捕获是必须捕获或抛出例外。或抛出例外。 在使用在使用Socket和和ServerSocket类构造完对象后,类构造完对象后,就可以使用它们提供的方法来实现端口的套接就可以使用它们提供的方法来实现端口的套接等功能。其中等功能。其中Socket类提供的主要方法有以下类提供的主要方法有以下几种:几种: getInputStream():返回此套接口链接地址的输入:返回此套接口链接地址的输入流。流。 getInetAddress():返回此套接口链接的地址对象。:返回此套接口链接的地址对象。 get

58、LocalAddress():返回套接口本地的地址对象。:返回套接口本地的地址对象。 getLocalPort():返回套接口本地的地址端口。:返回套接口本地的地址端口。 getOutputStream():返回此套接口链接地址的输出:返回此套接口链接地址的输出流。流。 getPort():返回此套接口链接地址的端口。:返回此套接口链接地址的端口。 setSoTimeOut():设置套接口的有效期限值。:设置套接口的有效期限值。 toString():返回套接口字符串。:返回套接口字符串。 close():关闭套接口。:关闭套接口。 isClosed():判断此套接口是否关闭。:判断此套接口是

59、否关闭。 isConnected():判断此套接口是否断开。:判断此套接口是否断开。 shutdownInput():关闭套接口的输入流。:关闭套接口的输入流。 shutdownOutput():关闭套接口的输出流。:关闭套接口的输出流。 ServerSocket类提供的主要方法有以下几种:类提供的主要方法有以下几种: accept():返回与服务器端建立连接的机器套接口。:返回与服务器端建立连接的机器套接口。 getChannel():返回服务套接口通道。:返回服务套接口通道。 getInetAddress():返回本机的地址对象。:返回本机的地址对象。 getLocalPort():返回服

60、务器所绑定的监听端口号。:返回服务器所绑定的监听端口号。 getSoTimeout():返回服务套接口限制的时间数。:返回服务套接口限制的时间数。 setSoTimeout(int timeout):设定服务套接口所需:设定服务套接口所需等到的时间限度。等到的时间限度。 toString():返回服务套接口字符串。:返回服务套接口字符串。 close():关闭服务套接口。:关闭服务套接口。 isClosed():判断服务套接口是否关闭。:判断服务套接口是否关闭。一对一的一对一的Socket C/S通信通信 TCP是一种可靠的、基于连接的网络协议,在是一种可靠的、基于连接的网络协议,在Inter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论