java课件第10章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15
第10章
网络通信
(4) getPath( ):返回该URL的路径。 (5) getFile( ):返回URL的文件名部分。 (6) getRef( ):返回URL的引用部分。 在这些URL属性获取方法中,如果某些属性不存在,这 些方法就返回null或 -1。
16
第10章
网络通信
【示例10-1】 UrlTest.java获取URL对象属性实例。
import Java.net.URL; //引入URL类 import Java.net.MalformedURLException; public class UrlTest { public static void main(String args[]){ URL sampleURL=null; try{ sampleURL=new URL("http://www.163.com: 80/index.htm#down"); //创建URL对象 }
21
第10章
网络通信
//将通过URL对象的openStream方法获得 的InputStream对象赋给streamObj InputStream streamObj=urlObj.openStream( ); //通过上面的streamObj生成 InputStreamReader类对象readerObj InputStreamReader readerObj=new InputStreamReader(streamObj); //生成BufferedReader类对象buffObj BufferedReader buffObj=new BufferedReader(readerObj); //while循环用于读取URL对象指定的 HTML文件内容,按行读取 while((strLine=buffObj.readLine( ))!=null)
6
第10章
网络通信
Java网络通信可以在三个层次上进行: (1) URL层次,即最高级层次,基于应用层通信协议, 利用URL直接进行Internet上的资源访问和数据传输。 (2) Socket层次,即传统网络编程经常采用的流式套接 字方式,通过在Client/Server(客户机/服务器)结构的应用程 序之间建立Socket套接字连接,然后在连接之上进行数据通 信。 (3) Datagram数据包层次,即最低级层次,采用一种无 连接的数据包套接字传输方法,是用户数据报(UDP)协议的 通信方式。
20
第10章
网络通信
【示例10-2】 UrlfileInfo.java通过URL读取西安电子科技 大学主页的内容实例。
//类UrlfileInfo用于输出西安电子科技大学主页信息 public class UrlfileInfo{ public static void main(String args[]){ try{ //声明字符串strLine,用于读取一行信息 // strLine String strLine; //声明url对象,该对象将连接到西安电子科技大 学主页上 URL urlObj=new URL("http: //www.xidian.edu.cn/");
8
第10章
网络通信
URL由协议名称和资源名称两部分组成。资源名称应该 是资源的完整地址,包括主机名、端口号、文件名或文件内 部的一个引用,格式如下: <协议名>://<主机名>:<端口号>/<文件名>#<引用>
9
第10章
网络通信
其中,协议名(protocol)指明获取资源所使用的传输协议,如 HTTP、FTP、FILE等;主机名指定信息资源所在计算机的 IP地址或域名,如www.sun.com;端口号用来区分不同的网 络服务,如果没有端口号,则表示端口号为该协议的默认值; 文件名指明文件在计算机上的具体位置,包括该文件的完整 路径,在HTTP协议中默认的文件名是index.html,因此, http://Java.sun.com就等同于http://Java.sun.com/index .html;引用为资源内的某个引用,用来定位显示文件内容的 位置,如http://Java.sun.com/index.html#chapter1。但并非所 有的URL都包含这些元素。对于多数的协议,主机名和文件 名是必需的,但端口号和文件内部的引用则是可选的。
10
第10章
wenku.baidu.com
网络通信
10.2.1 URL类 1.创建URL 为了使用URL进行通信,Java.net中实现了URL类。我 们可以通过下面的构造方法来初始化一个URL对象: (1) public URL(String spec)。这种方法最简单也最常用, 其中spec表示一个完整的可在浏览器看到的URL地址。例如: URL u=new URL(http://www.tsinghua.edu.cn/);
第10章
网络通信
第10章
网 络 通 信
10.1 概述 10.2 使用URL访问网络资源 10.3 Socket通信 本章小结 习题
1
第10章
网络通信
10.1 概
述
网络通信的核心是协议。协议是指进程之间交换信息为 完成任务所使用的一系列规则和规范。在Internet网络通信 中,主要使用的协议有适用于网络层的IP协议,适用于传输 层的TCP、UDP协议,适用于应用层的HTTP、FTP、SMTP、 NNTP(主要用于解释数据内容)协议等。
22
第10章
网络通信 //连接关闭 buffObj.close( ); } catch(MalformedURLException e){ System.err.println(“url error”); } catch(IOException e){ System.out.println(“IO error”); }
13
第10章
网络通信
使用URL构造方法创建对象时,如果参数有错误,就会 产生一个非运行时异常MalfromedURLException,因此,在 构造URL对象时必须捕获异常并进行相应处理,通常的格式 如下: try{ URL u=new URL(…) }catch(MalfromedURLException e){ … } //exception handler code here
11
第10章
网络通信
(2) public URL(String protocol, String host, String file)。 (3) public URL(String protocol, String host, int port, String file)。 上述后两种方法将一个URL地址分解,按不同部分分别 指定协议、主机、端口、文件。例如: URL u=new URL(“http”,“www.263.net”, “/index.html”); URL u1=new URL("http","Java.sun.com",80, "docs/books/tutorial.intro.html");
7
第10章
网络通信
10.2 使用URL访问网络资源
URL(Uniform Resource Locator,统一资源定位器)表示 网络上某一资源的地址。该资源可以是一个简单的文件或者 一个目录,也可以是一个复杂的对象(如对数据库的查询或 一个搜索引擎)。因此,只要按URL规则定义某个资源,那 么网络上的其他程序就可以通过URL来访问它。使用URL进 行网络编程,不需要对协议本身有太多的了解,功能也比较 弱,相对而言是比较简单的。
14
第10章
网络通信
2.获取URL对象的属性 一旦拥有了URL对象,该对象就具有自己的一些属性, 可以通过URL类提供的方法来获取属性信息,其中常用的方 法有以下几种。 (1) getProtocol( ):返回URL的协议标志部分。 (2) getHost( ):返回URL的主机名部分。 (3) getPort( ):将端口号作为整数返回,如没有设置则 返回 -1。
2
第10章
网络通信
网络通信的一个重要概念就是IP地址,为了指出想要连 接的计算机,必须有一种方法能惟一地标识它,而IP地址所 代表的就是Internet上的某台计算机,根据该IP地址就可以同 这台计算机进行通信。一个IP地址由4个0~255之间的数字 组成,数字之间用点号(.)分隔,例如125.122.10.236。IP地址 不是随意指定的,有专门的国际机构负责其定义和分类。由 数字所表示的IP地址难以记忆,这就需要有更为形象化和简 洁的表示方法,因此,实际应用中,常常将它对应一个有意 义的名称,即主机名(Internet中也称域名),例如“雅虎”的 域名www.yahoo.com就对应了66.94.230.39这样的IP地址。网 络中的DNS服务器负责自动将主机名转换为IP地址。
4
第10章
网络通信
图10-1 端口的作用
5
第10章
网络通信
当采用Java语言进行网络编程时,程序主要处理的是应 用层的任务,但需要根据传输层所选择的协议而选用不同网 络API以完成实际的网络通信任务。这些基本网络类主要包 含在Java.net包中。例如,Java中的套接字(Socket)编程就是 网络通信协议的一种应用。Java将TCP/IP协议封装到Java.net 包的Socket和ServerSocket类中,它们可以通过TCP/IP协议建 立网络上的两台计算机(程序)之间的可靠连接,并进行双向 通信。
3
第10章
网络通信
虽然通过IP地址或域名可以让用户找到Internet上某台确 定的计算机,但仅有这点还不足以完成实际的通信。若这台 计算机在应用层有多个程序在运行,那么发送到该计算机的 数据包递交给哪个程序来处理呢?要解决该问题,需要借助 于端口号。端口号(port number)存在于传输层,是16个比特 所表示的一个数字,其范围在0~65535,1024以下的端口号 由系统使用。这样,在数据包接收端的计算机,就可根据传 输层所收到的数据包的端口号进行判断,并将该数据包递交 给合适的应用层程序来处理,如图10-1所示。
17
第10章
网络通信
catch(MalformedURLException e) { //异常处理 e.printStackTrace( ); } //显示sampleURL对象的各属性值 System.out.println("协议:"+sampleURL.getProtocol( )); System.out.println("主机名:"+sampleURL.getHost( )); System.out.println("端口号:"+sampleURL.getPort( )); System.out.println("文件名:"+sampleURL.getFile( )); System.out.println("锚点:"+sampleURL.getRef( )); } }
12
第10章
网络通信
(4) public URL(URL context,String spec)。这种方法基 于一个已有的URL对象创建一个新的URL对象,多用于访问 同一个主机上不同路径的文件,例如: URL u=new URL(“http://Java.sun.com: 80/docs/books/”); URL u1=new URL(u,“tutorial.intro.html”); URL u2=new URL(u,"tutorial.super.html");
18
第10章
网络通信
程序运行结果: 协议:http 主机名:www.163.com 端口号:80 文件名:/index.htm 锚点:down
19
第10章
网络通信
3.通过URL对象访问网络资源 URL对象创建后,就可以通过它来访问指定的www资 源。这时需要调用URL类的openStream( )方法,其定义如下: public final InputStream openStream( ); 该方法与指定的URL建立连接并返回一个InputStream类 的对象,这样访问网络资源的操作就变成了熟悉的I/O操作, 通过这个InputStream对象,可用字节流的方式读取资源数据。