Java网络通信程序的设计.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Java网络通信程序的设计.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 网络 通信 程序 设计
- 资源描述:
-
1、第11章 Java网络通信程序的设计 第第11章章 Java网络通信程序的设计网络通信程序的设计 11.1 处理处理URL内容内容11.2 使用使用Socket通信通信 11.3 使用使用UDP通信通信 第11章 Java网络通信程序的设计 11.1 处理处理URL内容内容 URL(Uniform Resource Locator)是Internet的关键部分,它提供了人和机器的导航,其功能是指向计算机里的资源,即定位。URL可以分成三个部分:通信协议、计算机地址和文件。URL常见的通信协议有三种:http,ftp和file。所谓通信协议,就是客户端计算机与服务器端计算机在网络上通信的方法。第
2、11章 Java网络通信程序的设计 有时候在地址后面还要指定使用哪一个端口(Port),例如http:/:80/index.html。如果URL没有指定使用哪一个端口,则会根据通信协议使用默认的端口。一般地,http协议默认端口为80,ftp协议默认端口为21。包中包含两个专门用于URL的关键类,即URL和URLConnection。URL和URLConnection类封装了检索远程站点信息的操作,因而大大地降低了这些操作的复杂性。下面几节将介绍这两个类。第11章 Java网络通信程序的设计 11.1.1 URL类的基本方法 URL类提供的最基本的网络功能是以流的形式读取URL所指的的数据。U
3、RL类的实例可以用表示URL的文本串来建立,以表示URL所指的数据。构造一个URL类实例的最简单方法是为URL构造方法赋予一个字符串:URL url=new URL(http:/ data=new URL(url,data/data.html);第11章 Java网络通信程序的设计 这种构造方法指定了位于url的data子目录中的data.html文件,它的绝对地址应该是http:/ Java网络通信程序的设计 注:URL类既支持http协议,也支持ftp和file协议。如果URL文本有错或者Java平台不支持其协议部分,则这个构造函数抛出一个MalformedURLException,该Ex
4、ception是java.io.IOException的子类,指出给定的是不合法的URL。通常应通过try-catch块处理或声明让调用方法传递这个异常。第11章 Java网络通信程序的设计 URL类常用的构造函数有下列三种:URL(String spec)throws MalformedURLException 创建一个由spec指定的URL类的实例。URL(String spec,String host,int port,String file)throws MalformedURLException 创建一个URL类的实例,分别指定其通信协议(protocal)、计算机地址(host)、
5、连接端口(port)和文件(file)。如果port值是-1,则表示使用默认端口。第11章 Java网络通信程序的设计 URL(String protocal,String host,String file)throws MalformedURLException功能同上,但没有指定端口,即使用默认的端口。URL类的一些主要方法如下:public String getFile():返回URL中的文件部分。public String getHost():返回URL中的计算机地址部分。public int getPort():返回URL中所使用的端口。public String getProtoc
6、al():返回URL中通信协议的部分。第11章 Java网络通信程序的设计 下面是一个使用URL类及其方法的例子。例11.1 URLDemo.javaimport genesis.*;import .*;public class URLDemopublic static void main(String args)try第11章 Java网络通信程序的设计/创建一个指向首页的URL类的实例URL url=new URL(http:/ e)Transcript.println(错误的URL!);第11章 Java网络通信程序的设计 这个例子很简单,因为没有指定URL的连接端口,所以显示值为-1。
7、实际连接时,会根据通信协议而决定使用哪一个端口。它的运行结果如图11.1所示。第11章 Java网络通信程序的设计 图 11.1第11章 Java网络通信程序的设计 11.1.2 用URL类实现页面的访问 一旦构造了URL,就可以用URL类中的openStream()方法读取URL描述的数据。openStream()打开一个到URL类指定资源的连接,并返回一个InputStream对象。利用这个对象,可以方便的读取资源的内容,也可以链接到其他类型的输入流和读取器上。我们来看一个读取页面内容的例子。例11.2 GetPage.java import genesis.*;import java.i
8、o.*;import .*;第11章 Java网络通信程序的设计 public class GetPagepublic static void main(String args)tryURL url=new URL(http:/ in=url.openStream();BufferedReader reader=n e w B u f f e r e d R e a d e r(n e w InputStreamReader(in);第11章 Java网络通信程序的设计 /打开index.hmtl文件为写做准备FileWriter fw=new FileWriter(index.html);P
9、rintWriter pw=new PrintWriter(fw);String line;/逐行读入页面内容while(line=reader.readLine()!=null)/将读入的行保存到index.html文件pw.println(line);/将读入的行显示在窗口中Transcript.println(line);第11章 Java网络通信程序的设计 reader.close();pw.close();fw.close();catch(IOException e)Transcript.println(e.getMessage();程序的运行结果如图11.2所示。第11章 Java
10、网络通信程序的设计 图 11.2 第11章 Java网络通信程序的设计 上面的例子通过读取的首页index.html,展示了怎样通过URL访问Web页面的内容。图11.2窗口中显示的就是index.html页面所包含的内容(即它的源码)。该例中将读入的内容保存在当前目录下,名为index.html的文件中,用浏览器打开这个文件,可以看到如同访问的页面。但是,无法看到页面中的图片,因为打开的输入流只读入了页面的内容,并没有将图片链接也读入进来。打开index.html文件将看到如图11.3所示的页面。第11章 Java网络通信程序的设计 图 11.3第11章 Java网络通信程序的设计 11.1
11、.3 用URLConnection类实现页面的访问 我们已经知道了如何通过URL类访问URL资源,但如果想了解关于这个资源的更多信息,就需要使用URLConnection类。URLConnection类提供了访问网络资源时更多、更好的控制方法。使用URLConnection类来访问Web页面的步骤如下:(1)调用URL类的openConnection()方法得到一个URLConnection类的实例:URLConnection conn=url.openConnection();(2)调用以下方法,设置所有相关属性:第11章 Java网络通信程序的设计 setAllowUserInteract
12、ion()setDoInput()setDoOutput()setIfModifiedSince()setUseCaches()setRequestProperty()(3)调用connect()方法连接远程资源:conn.connect();connect()方法除了创建一个连接指定服务器的套接字连接外,还可以查询服务器以获取相应头信息(header information)。第11章 Java网络通信程序的设计 (4)连接服务器以后,使用getHeaderFieldKey()和getHeaderField()方法来枚举出头信息的所有域。此外,也可以使用如下的方法来查询标准域的内容:getC
13、ontentEncoding()getContentLength()getContentType()getData()getExpiration()getLastModified()第11章 Java网络通信程序的设计 (5)使用getInputStream()方法访问资源数据。用getInputStream()方法将返回一个输入流,此输入流和URL类的openStream()方法返回的输入流是相同的。下面我们将详细的介绍其中的一些方法。在用于连接服务器前设置连接属性(第(2)步)的几个方法中,setDoInput()和setDoOutput()这两个方法最为重要。缺省时,连接服务器后将产生一
14、个用于读取服务器数据的输入流,但不会产生用于向服务器写出数据的输出流。如果需要用到一个输出流(例如,用于向CGI Form发送数据),就必须调用 conn.setDoOutput(true);第11章 Java网络通信程序的设计 setIfModifiedSince()方法用于告诉连接:只需要在给出的日期之后被修改过的数据。setUseCaches()和setAllowUserInteraction()方法只用于Applet。setUseCaches()方法指示浏览器先检查它的高速缓存区,这样可以优化访问,如果设置其值为false,将不使用浏览器的缓存,其默认值为true。setAllowUs
15、erInteraction()允许Applet弹出一个查询用户名和密码的对话框。这些设置在Applet外部不起作用。setRequestProperty()方法设置一个名字/值对,用于说明某一特定的协议。例如,想访问一个口令保护的网页,必须进行如下设置:第11章 Java网络通信程序的设计 String input=username+:+password;conn.setRequestProperty(Authorization,Basic +input);注:用ftp协议访问一个有口令保护的文件时,将使用和上面完全不同的方法,只需要创建一个如下形式的URL:ftp:/username: 当调
16、用了connect()方法后,就可以查寻响应头信息。我们通过下面的例子来介绍如何获得头信息的所有域和值以及页面内容。第11章 Java网络通信程序的设计 例11.3 GetHeaderField.javaimport genesis.*;import .*;import java.io.*;public class GetHeaderFieldpublic static void main(String args)try第11章 Java网络通信程序的设计 URL url=new URL(http:/ conn=url.openConnection();/连接服务器conn.connect()
17、;int i=1;String key=;String value=;第11章 Java网络通信程序的设计 /逐一读出指定URL中的所有域while(key=conn.getHeaderFieldKey(i)!=null)/读出对应域的值value=conn.getHeaderField(i);Transcript.println(key+:+value);i+;/获取一个输入流InputStream in=conn.getInputStream();第11章 Java网络通信程序的设计 BufferedReader reader=n e w B u f f e r e d R e a d e
18、 r(n e w InputStreamReader(in);/打开index.hmtl文件为写做准备FileWriter fw=new FileWriter(index.html);PrintWriter pw=new PrintWriter(fw);String line=;/逐行读入页面内容while(line=reader.readLine()!=null)第11章 Java网络通信程序的设计/保存到index.html文件中pw.println(line);reader.close();pw.close();fw.close();catch(IOException e)第11章 Ja
19、va网络通信程序的设计 Transcript.println(e.getMessage();程序的运行结果如图11.4所示。第11章 Java网络通信程序的设计 图 11.4 第11章 Java网络通信程序的设计 以上输出结果展示了一个典型的HTTP请求的响应头所包含的一组域。getHeaderFieldKey()和getHeaderField()方法分别返回响应头中指定位置的域名和值。指定值基数为1,当指定值为零或大于头中域总数时,将返回null串。由于URLConnection类中没有提供获得相应头中域总数的方法,所以需重复调用getHeaderFieldKey()方法,直到返回null串
20、来确定头中域的总数。第11章 Java网络通信程序的设计 程序中同时演示了如何通过URLConnection类获取页面内容。调用URLConnection类的方法getInputStream()将返回一个InputStream类的实例,这个对象和调用URL类中openStream()返回的InputStream对象是相同的。利用这个对象,我们可以建立一个获取页面内容的输入流。运行例子后,当前目录将会生成一个index.html文件,通过浏览器打开这个文件,可以看到,结果和前面通过URL访问页面内容所得到的结果相同。此外,为了便于查询最常见的响应头域的值,Java库提供了六个更为方便的方法直接访
21、问这些域,如表11.1所示。第11章 Java网络通信程序的设计 表11.1 直接获取指定域值的方法 域 名方 法返回类型DatagetDatalongExpiresgetExpirationlongLast-ModifiedgetLastModifiedlongContent-LengthgetContentLengthintContent-TypegetContenttypeStringContent-EncodinggetContentEncodingString第11章 Java网络通信程序的设计 11.1.4 与CGI的沟通 在Java技术出现之前,用CGI(Common Gatew
22、ay Interface)来提供相互交换网络数据的方法就已广泛使用。把信息从网络浏览器发送给相应的网络服务器,例如使用电子邮件服务,通常需要填写用户名和提交密码。传统的HTML语言提供了Form标记发送格式数据。一个典型的HTML Form描述如例11.4。第11章 Java网络通信程序的设计 例11.4 form.htmlName:第11章 Java网络通信程序的设计 Email Address:通过在浏览器上打开输入以上代码的html文件,我们可以看到一个如图11.5所示的页面。第11章 Java网络通信程序的设计 图 11.5 第11章 Java网络通信程序的设计 在Internet上访
23、问邮件服务时,用户需要填写一个类似上图的表单。当用户点击提交按键后,浏览器将会发送这些填写的数据到action属性指定的服务器中的CGI程序。CGI程序负责处理这些数据,然后生成一个HTML页面,并送回浏览器。对于邮件服务,这个新的响应页通常就是我们登陆后的页面。(有关CGI程序和HTML Form的详细内容,本章将不再继续讨论,如需了解可参考有关书籍)第11章 Java网络通信程序的设计 除了处理传统的非交互式类型外,URLConnection类也提供了用于CGI或Servlet连接的功能。和HTML表单页一样,Java程序可以向服务器发出一个CGI请求,这个请求既可以设为GET,也可以设为
24、POST。此外,也可在程序中拦截CGI程序的输出,所以通过Java程序可以实现和CGI程序交互信息的全部过程。第11章 Java网络通信程序的设计 通过GET方法向CGI程序发送信息时,只需将参数置于URL的末尾,并用“?”分隔。URL的基本格式为 http:/host/script?parameters 当包含两个以上的参数时,用一个“&”分开每个参数,并对参数做以下的编码处理:用“+”代替所有的空格,用%加两位十六进制数代替所有非字母的字符(包 括 汉 字)。例 如,假 设 一 个 参 数 为“C+Language”,它将被编码为“C%2b%2b+Language”,其中2b(十进制数43
25、)就是ASCII码的“+”字符。这种编码方法避免了空格干扰,并可以解释其他字符,这种编码方式称为URL编码。第11章 Java网络通信程序的设计 GET方法非常方便,但是有一个大的限制,就是浏览器一般会限制GET请求的URL串的字符个数。而POST的方法则不同,使用POST请求的时候,不把参数放在URL的末端,而是采用建立一个到服务器的输出流的方式。通过得到一个来自URLConnection的输出流,并把参数名/值对逐个写入到输出流,就可以实现POST方法的请求。使用POST方法时,仍需用URL编码方式处理这些输入的参数,并用“&”将参数分开。第11章 Java网络通信程序的设计 下面我们仍然
展开阅读全文