Java程序设计第14章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第14章 网 络 编 程 2.建立输入/输出数据流 .建立输入/ 读取或写入远程的计算机节点的信息时,要建立输入或输出 数据流。我们可以利用URLConnection类的成员方法 getInputStream( )和getOutputStream( )来获取输入和输出数据流。 例如,下面的两行语句用于建立输入数据流:
//读取网络上的文件 import java.io.*; import .*; import java.awt.*; import java.applet.*; public class c14_2 extends Applet { URL MyURL; //创建URL对象 TextArea tf=new TextArea(" ",14,70); public void init( ) {
第14章 网 络 编 程 2.URL类的常用成员方法 . 类的常用成员方法 表14.2 URL类的常用成员方法 类的常用成员方法
成员方法 public int getPort() public String getProtocol() public String getHost() public String getFile() public boolean equals(Object obj) public final InputStream openStream() string toString() 说 明 获取端口号(若端口号未设置,返回-1) 获取协议名(若协议未设置,返回null) 获取主机名(若主机名未设置,返回null) 获取文件名(若文件名未设置,返回null) 与指定的URL对象obj进行比较,如果相同 返回true,否则返回false 获取输入流。若获取失败,则抛出一个 java.io.Exception异常 将此URL对象转换成字符串形式
第14章 网 络 编 程 由于URL的openStream( )成员方法返回的是InputStream类 的对象,所以,只能通过read( )方法逐个字节地去读URL地址 处的资源信息。这里利用BufferedReader对原始信息流进行了包 装和处理,以提高I/O效率。该程序的运行结果如图14.1所示。
InputStreamReader ins=new InputStreamReader(con.getInputStream( ));
第14章 网 络 编 程
(2) public URL(String protocol,String host,String file)throws MalformedURLException方法。 这个构造方法用指定的URL的协议名、主机名和文件名创 建URL对象。参数中的protocol为协议名,host为主机名,file为 文件名,端口号使用缺省值。若使用的协议是未知的,则抛出 MaiformedURLException异常。例如: "http","","index.html"
第14章 网 络 编 程 在TCP协议中,端口被规定为一个在0~65535之间的16位的 整数。其中,0~1023被预先定义的服务通信所占用(如FTP协议 的端口号是21,http协议的端口号为80等)。除非我们需要访问 这些特定服务,否则,就应该使用1024~65535这些端口中的某 一个来进行通信,以免发生端口的冲突。
第14章 网 络 编 程 { st1=MyURL.openStream( ); InputStreamReader ins=new InputStreamReader(st1); BufferedReader in=new BufferedReader(ins); while((Str=in.readLine( ))!= null) //从URL处获取信息并显示 { tf.append(Str+"\n"); } } catch (IOException e) { System.out.println("Error in I/O:" + e.getMessage( )); } } }
第14章 网 络 编 程 运行结果如下: URL String: /java/index.html Protocol: http Host: Port:-1 File: java/index.html
第14章 网 络 编 程 【示例程序c14_2.java】
第14章 网 络 编 程
表14.1 URL地址组成 地址组成
http 80 index.html
传输协议 主机名或主机地址 通信端口号 文件名称
第14章 网 络 编 程 一般的通信协议都已经规定好了开始联络时的通信端口, 例如,HTTP协议的缺省端口号是80,FTP协议的缺省端口号是 21等。URL使用协议的缺省端口号时,可以不写出缺省端口号。 所以,一般的URL地址只包含传输协议、主机名和文件名就足 够了。 网络通信中,我们常常会碰到地址(Address)和端口(Port)的 问题。两个程序之间只有在地址和端口方面都达成一致时,连 接才能建立。这与我们寄信要有地址、打电话要有电话号码一 样。两个远方程序建立连接时,首先需要知道对方的地址或主 机名,其次是端口号。地址主要用来区分计算机网络中的各个 计算机,而端口的定义可以理解为扩展的号码,具备一个地址 的计算机可以通过不同的端口来与其他计算机进行通信。
第14章 网 络 编 程
this.add(tf); // String ur="/index.html"; //指定远程网上的信息 String ur="file:///d:/java教材/javabook/ch14/c14_1.java"; //指定本地网上的信息 try { MyURL=new URL(ur); } catch(MalformedURLException e) //创建URL对象可能产生的异常 { System.out.println("Can't get URL: " ); } } public void paint(Graphics g) { String Str; InputStream st1=null; try
第14章 网 络 编 程 (3) public URL(String protocol,String host,String port,String file)throws MalformedURLException方法。 这个构造方法与构造方法(2)相比,增加了1个指定端口号 的参数。
第14章 网 络 编 程 (4) public URL(URL context,String spec)throws MalformedURLException方法。 这个构造方法用于创建相对的URL对象。方法中的参数 context为URL对象,用于指定URL位置,参数spec是描述文件名 的字符串。如果给出的协议为null,则抛出 MalformedURLException异常。例如: URL base=new URL("file///c:/ABC/xx.java"); URL gk=new URL(base,"gg.txt"); 中的URL对象gk是相对URL对象。javac在使用对象gk时会从对 象base中查出文件gg.txt所在的位置:本地主机是c:\ABC\。对 象gk指明的资源也就是:file///c:/ABC/gg.txt。 如果在程序中不访问xx.java的话,在创建base的构造方法 中则略去xx.java,创建gg的方法不变,gg指明的资源仍不变。
第14章 网 络 编 程
第14章 网 络 编 程
14.1 URL通信 通信 14.2 Socket通信 通信 14.3 UDP通信 通信
第14章 网 络 编 程
14.1 URL 通 信
URL(Uniform Resource Locator)是统一资源定位器的简称, 它表示Internet/Intranet上的资源位置。这些资源可以是一个文件、 一个目录或一个对象。我们使用浏览器来浏览网络上的资源时, 首先需要键入URL地址,才可以访问相应的主页。例如: :80/index.html /index.html file:///c:/ABC/xx.java 每个完整的URL由个四部分组成,这四部分的划分及其含义 如表14.1中的例子所示。
第14章 网 络 编 程
MyURL=new URL("/java/index.html"); } catch (MalformedURLException e) { System.out.println("MalformedURLException: " + e); } System.out.println(“URL String: ”+MyURL.toString( )); //获取URL对象转换 成字符串 System.out.println("Protocol: "+MyURL.getProtocol( )); //获取协议名 System.out.println("Host: "+MyURL.getHost( )); //获取主机名 System.out.println("Port: "+MyURL.getPort( )); //获取端口号 System.out.println("File: "+MyURL.getFile( )); //获取文件名 } }
第14章 网 络 编 程 14.1.2 利用 利用URL类访问网上资源示例程序 类访问网上资源示例程序 【示例程序c14_1.java】 获取某个URL地址的协议名、主机 名、端口号和文件名。 import .*; public class c14_1 { public static void main(String args[ ]) { URL MyURL=null; try {
第14章 网 络 编 程
图14.1 程序c14_2的运行结果
第14章 网 络 编 程 14.1.3 使用 使用URLConnection类访问网上资源 类访问网上资源 上面介绍的方法只能读取远程计算机节点的信息,如果希 望在读取远程计算机节点的信息时,还可向它写入信息,则需 要使用软件包的另一个类URLConnection。 1.创建URLConnection类的对象 .创建 类的对象 要创建URLConnection对象必须先创建一个URL对象,然 后调用该对象的openConnection( )方法就可以返回一个对应其 URL地址的URLConnection对象。例如: URL MyURL=new URL("/index.html"); URLConnection con= MyURL.openConnection( );
第14章 网 络 编 程 14.1.1 URL类 类 1.创建URL对象 .创建 对象 (1) public URL(String spec)throws MalformedURLException方法。 这个构造方法使用URL的字符串spec来创建一个URL对象。若 字符串spec中使用的协议是未知的,则抛出MalformedURLException 异常,在创建URL对象时必须捕获这个异常。例如:URL file=new URL("http:// /index.html"); 这种以完整的URL创建的URL对象称为绝对URL,该对象包含 了访问该URL所需要的全部信息。