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

下载本文档

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

文档简介

Java网络编程Java最初是作为一中网络编程语言出现的,它能够使用网络上的各种资源和数据,与服务器建立各种传输通道,将自己的数据传送到网络的各个地方。1 网络编程基础网络上的计算机要互相通信,首先必须做到两点:(1)能够准确定位网络上的任意一个通信主体。(2)有一套通信规则保证网络上可靠高效的数据传输。下面首相介绍通信主体IP地址和端口,然后介绍通信规则协议,最后是网络编程简介。1.1 IP地址和端口 通信主体可以使用IP地址和端口来表示。IP地址可定位网络上的任意一台主机。算口号可定位主机的进程。端口与IP地址一起为网络通信的应用程序之间提供一中确切的地址标识。1.IP地址IP地址是计算机网络中任意一台计算机地址的唯一标识。通过这种地址标识,网络中国的计算机可以互相定位和通信。目前,IP地址由4个8位的二进制数组成,为方便人们记忆,长转化为十进制形式,中间以小数点分隔,如。主机名是计算机网络中一台计算机的标识名,如MyComputer等,也可以看做是IP地址的助记名,如、等。在Internet上,Ip地址和主机名是一一对应的。2.端口计算机与网络一般只有一个单独的物理连接,所有的数据最终都要通过连接到达一个指定的计算机。然而,数据是传向运行在计算机上的不同应用程序的,计算机需要知道数据传向哪个应用程序,这就要用到端口。网络通信使用端口来标识同一主机上的不同进程、不同的应用程序或者不同的服务,端口号是端口的数字编号。算口号是16位的数字,取值范围是065 535,其中11 023的端口号被系统保留,它们被系统服务占据,如HTTP占用了80号端口、FTp占用了21号端口,应用程序不能绑定这些端口。通常来说,通过IP地址可以定位到网络的某台计算机。计算机运行起来以后,将有多个长须。到底数据传到哪个程序,使用端口来区分。实际上,这里说程序或者进程都不是很准确,可以把端口理解为计算机内部的虚拟通道,程序可以通过这个通道进行数据传输和处理。这样就可以知道,网络中的多台计算机进行通信时,不仅需要明确和哪一台计算机连接,而且要确定在两台计算机的哪一条虚拟通道(端口)上传输数据。1.2 TCP/IP通信规则就是协议,是进程之间交换信息以完成任务所使用的一系列规则和规范。它是网络通信的核心。协议主要包含两个方面的定义:定义了进程之间交换信息所必须遵循的顺序。定义了进程之间所交换的消息的格式。两个进程只要遵循相同的协议,就可以互相交换信息,而这两个进程可以用不同的编程语言编写,可以位于两台完全不同的计算机上。国际标准化组织给出了一个通用的参考协议,称为开放式系统互连参考模型。但在实际的网络通信过程中,遵循的是TCP/IP。在编写网络通信程序时,虽然Java已经在包中提供了丰富的通信类,但了解一定的TCP/IP知识,有助于对程序的理解和避免错误的处理。TCP/IP是一组包括TCP、IP、UDP、ICMP和其他一些协议的协议簇。TCP/IP采用了4层的层次结构,每一层都使用它的下一层所提供的网络来完成自己的需求。这4层分别为:应用层:应用程序间沟通的层,如简单电子邮件传输协议(SMTP)、文件传输协议(FTP)、网络远程访问协议(TELNET)等。传输层:此层提供了结点间的数据传送服务,如传输控制协议(TCP)、用户数据协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。互联网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。网络接口层:对实际的网络媒体的管理,定义如何使用实际网络来传送数据。1.3 网络编程简介Java语言专门为网络通信提供了软件包,它包含了多个用于各种标准网络协议通信的类和接口。采用包提供的API可以快速方便地开发基于网络的应用。Java网络程序设计的基本方式主要有三种:(1)使用URL访问网络资源。(2)连接通信(3)数据报通信2 URL网络编程2.1 URL概念URL是统一资源定位器(uniform resource locator)的简称,它表示Internet上某一资源的地址。Internet上的资源包括HTML文件、图像文件、声音文件、动画文件以及其他任何内容。URL指明取得资源采用的协议和地址,通过URL可以访问Internet上响应的文件和其他资源,如最常见的WWW、FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或网络资源。URL的基本结构由5部分组成,其格式如下::/:/#其中:传输协议是指所使用的协议名,如HTTP、FTP等。主机名是指资源所在的计算机,可以是IP地址,也可以是主机名或域名。端口号用来区别不同的网络服务,如HTTP服务的默认端口号是80,FTP服务的默认端口是21.文件名包含该文件的完整路径。引用为资源内的某个引用,用来定位显示文件内容的位置并非所有的URL都包含这些元素。对于多数的协议,主机名和文件名是必须的,端口号和文件内部的引用则是可选的。Java最初是作为一种网络编程语言出现的,它能够使用网络上的各种资源和数据,与服务器建立各种传输通道,将自己的数据传送到网络的各个地方。你可以用Java很轻松地完成这些,因为Java类库提供了很强大的网络功能。 本章主要介绍如下内容:Java网络类和接口InetAddress类URL和URLConnection类TCP/IP服务器与客户端套接字Datagram套接字 Java网络类和接口 Java中有关网络方面的功能都定义在程序包中。Java所提供的网络功能可大致分为三大类:URL和URLConnection 这是三大类功能中最高级的一种。通过URL的网络资源表达方式,很容易确定网络上数据的位置。利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端。Socket 所谓Socket,可以想像成两个不同的程序通过网络的通道,而这是传统网络程序中最常用的方法。一般在TCP/IP网络协议下的客户服务器软件采用Socket作为交互的方式。Datagram 是这些功能中最低级的一种。其他网络数据传送方式,都假想在程序执行时,建立一条安全稳定的通道。但是以Datagram的方式传送数据时,只是把数据的目的地记录在数据包中,然后就直接放在网络上进行传输,系统不保证数据一定能够安全送到,也不能确定什么时候可以送到。也就是说,Datagram不能保证传送质量。 InetAddress类 .InetAddress类是Java的IP地址封装类,它不需要用户了解如何实现地址的细节。该类的定义如下:public final class InetAddress extends object implements Serializable 该类里有两个字段:hostName(String)和address(int),即主机名和IP地址。这两个字段是不公开的,我们不能直接访问它们。 下面我们介绍InetAddress类提供的Internet地址的操作。 1 创建InetAddress对象的方法 InetAddress类没有构造方法,要创建该类的实例对象,可以通过该类的静态方法获得该对象。这些静态方法如下。public static InetAddress getLocalHost() 方法getLocalHost()获得本地机的InetAddress对象,当查找不到本地机器的地址时,触发一个UnknownHostException异常。示范代码如下: try InetAddress address=InetAddress.getLocalHost( ); / 其他处理代码catch(UnknownException e) ; / 异常处理代码public static InetAddress getByName (String host) 方法getByName(String host)获得由host指定的InetAddress对象,host是计算机的域名(也就是名字),其作用跟IP地址一样,只不过域名标识计算机比IP标识计算机更易于记忆。如果找不到主机会触发UnknownHostException异常。示范代码如下: try InetAddress address=InetAddress.getByName( host ); / 其他处理代码catch(UnknownException e) / 异常处理代码public static InetAddress getAllByName(String host) 我们知道,在Internet上不允许多台计算机共用一个名字(或者说是IP地址),但是在Web中,可以用相同的名字代表一组计算机。通过方法InetAddressgetAllByName(String host)可以获得具有相同名字的一组InetAddress对象。出错了同样会抛出UnknownException异常。示范代码如下: try InetAddress address=InetAddress.getAllByName( host ); / 其他处理代码catch(UnknownException e) / 异常处理代码2 实例:查询IP地址的版本 InteAddress类有一个getAddress()方法,该方法将IP地址以网络字节顺序作为字节数组返回。当前IP只有4个字节,但是当实行IPV6时,就有16个字节了。如果需要知道数组的长度,可以用数组的length字段。使用getAddress( )方法的一般性用法如下所示: InetAddress inetaddress=InetAddress.getLocalHost( );byte address=inetaddress.getAddress( );我们要注意的是返回的byte 字节是无符号的。但是Java没有无符号字节的基本数据类型,因此如果要对返回的字节操作时,必须要将int做适当的调整。下面的方法就实现了这个目的:int unsignbyte = signbyte 0 ? signbyte + 256 : signbyte; 如果signbyte是负数,就加256使其成为正数,否则就保持不变。下面的程序示例12-1可以查询IP地址是IPV4还是IPV6,还能查询IP的类别。【程序源代码】 1 / = Program Description =2 / 程序名称:示例12-1: IPVersion.java3 / 程序目的:查询IP的版本,熟悉InetAddress用法4 / =5 import .*;6 import java.io.*;7 8 public class IPVersion 9 10 public static void main(String args)11 12 try13 14 InetAddress inetadd=InetAddress.getLocalHost();15 byte address=inetadd.getAddress( );16 if (address.length=4)17 18 System.out.println(The ip version is ipv4);19 int firstbyte=address0;20 if (firstbytejava internethostname=kevinkevin/1D:java projectjava internethostname=kevinkevin/1Java最初是作为一种网络编程语言出现的,它能够使用网络上的各种资源和数据,与服务器建立各种传输通道,将自己的数据传送到网络的各个地方。你可以用Java很轻松地完成这些,因为Java类库提供了很强大的网络功能。 本章主要介绍如下内容:Java网络类和接口InetAddress类URL和URLConnection类TCP/IP服务器与客户端套接字Datagram套接字 Java网络类和接口 Java中有关网络方面的功能都定义在程序包中。Java所提供的网络功能可大致分为三大类:URL和URLConnection 这是三大类功能中最高级的一种。通过URL的网络资源表达方式,很容易确定网络上数据的位置。利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端。Socket 所谓Socket,可以想像成两个不同的程序通过网络的通道,而这是传统网络程序中最常用的方法。一般在TCP/IP网络协议下的客户服务器软件采用Socket作为交互的方式。Datagram 是这些功能中最低级的一种。其他网络数据传送方式,都假想在程序执行时,建立一条安全稳定的通道。但是以Datagram的方式传送数据时,只是把数据的目的地记录在数据包中,然后就直接放在网络上进行传输,系统不保证数据一定能够安全送到,也不能确定什么时候可以送到。也就是说,Datagram不能保证传送质量。 InetAddress类 .InetAddress类是Java的IP地址封装类,它不需要用户了解如何实现地址的细节。该类的定义如下:public final class InetAddress extends object implements Serializable 该类里有两个字段:hostName(String)和address(int),即主机名和IP地址。这两个字段是不公开的,我们不能直接访问它们。 下面我们介绍InetAddress类提供的Internet地址的操作。 1 创建InetAddress对象的方法 InetAddress类没有构造方法,要创建该类的实例对象,可以通过该类的静态方法获得该对象。这些静态方法如下。public static InetAddress getLocalHost() 方法getLocalHost()获得本地机的InetAddress对象,当查找不到本地机器的地址时,触发一个UnknownHostException异常。示范代码如下: try InetAddress address=InetAddress.getLocalHost( ); / 其他处理代码catch(UnknownException e) ; / 异常处理代码public static InetAddress getByName (String host) 方法getByName(String host)获得由host指定的InetAddress对象,host是计算机的域名(也就是名字),其作用跟IP地址一样,只不过域名标识计算机比IP标识计算机更易于记忆。如果找不到主机会触发UnknownHostException异常。示范代码如下: try InetAddress address=InetAddress.getByName( host ); / 其他处理代码catch(UnknownException e) / 异常处理代码public static InetAddress getAllByName(String host) 我们知道,在Internet上不允许多台计算机共用一个名字(或者说是IP地址),但是在Web中,可以用相同的名字代表一组计算机。通过方法InetAddressgetAllByName(String host)可以获得具有相同名字的一组InetAddress对象。出错了同样会抛出UnknownException异常。示范代码如下: try InetAddress address=InetAddress.getAllByName( host ); / 其他处理代码catch(UnknownException e) / 异常处理代码2 实例:查询IP地址的版本 InteAddress类有一个getAddress()方法,该方法将IP地址以网络字节顺序作为字节数组返回。当前IP只有4个字节,但是当实行IPV6时,就有16个字节了。如果需要知道数组的长度,可以用数组的length字段。使用getAddress( )方法的一般性用法如下所示: InetAddress inetaddress=InetAddress.getLocalHost( );byte address=inetaddress.getAddress( );我们要注意的是返回的byte 字节是无符号的。但是Java没有无符号字节的基本数据类型,因此如果要对返回的字节操作时,必须要将int做适当的调整。下面的方法就实现了这个目的:int unsignbyte = signbyte 0 ? signbyte + 256 : signbyte; 如果signbyte是负数,就加256使其成为正数,否则就保持不变。下面的程序示例12-1可以查询IP地址是IPV4还是IPV6,还能查询IP的类别。【程序源代码】 1 / = Program Description =2 / 程序名称:示例12-1: IPVersion.java3 / 程序目的:查询IP的版本,熟悉InetAddress用法4 / =5 import .*;6 import java.io.*;7 8 public class IPVersion 9 10 public static void main(String args)11 12 try13 14 InetAddress inetadd=InetAddress.getLocalHost();15 byte address=inetadd.getAddress( );16 if (address.length=4)17 18 System.out.println(The ip version is ipv4);19 int firstbyte=address0;20 if (firstbytejava internethostname=kevinkevin/1D:java projectjava internethostname=kevinkevin/1URL和URLConnection类 URL是Uniform Resource Locator(统一资源定位器)的缩写。在WWW风行后,以URL表示Internet上各种数据资源的位置,已经成为一种标准的方式。为了处理方便,Java将URL封装成URL类, 我们可以用一个URL对象记录下完整的URL信息。 URL类为我们提供了不同的构造方法:public URL(String spec)这个构造方法用指定的URL来创建一个URL对象,比如: try URL rul=new URL(/*/*.html);catch(MalformedURLException e) public URL(String protocol,String host,int port,String file) 该构造方法用指定的协议、主机名、端口号、文件路径及文件名创建一个URL对象,记住file变量必须以下划线开始。比如我们要表示URL:http:/:80/local/searchresult.html则可以这样表示: try URL url=new URL(http,,80,/local/searchresult.html);catch(MalformedURLException e) public URL(String protocol, String host, String file)该构造方法用指定的协议、主机名、路径及文件名创建URL对象。public URL( URL contoxt, String spec)该构造方法用已存在的URL对象context创建URL对象。示例如下: tryURL base=new URL(:80/x-file/1112.html);URL loc=new URL(base , #change);catch(MalformedURLException e) URL类中一些很基本的方法如下:public final Obect getContent() 这个方法取得传输协议。public String getFile() 这个方法取得资源的文件名。 public String getHost() 这个方法取得机器的名称。public int getPort() 这个方法取得端口号。public String getProtocol() 这个方法取得传输协议。public String toString() 这个方法把URL转化为字符串。 1 实例:URL对象的创建及使用 下面我们举例介绍URL对象的创建及使用,见示例12-3。【程序源代码】 1 / = Program Description =2 / 程序名称:示例12-3: Myurl.java3 / 程序目的:熟悉URL对象的创建及使用4 / =5 import . *;6 import java.io.*;7 8 class Myurl9 10 public static void main(String args)11 12 try 13 URL url=new URL(/chn/index.htm);14 System.out.println(the Protocol: +url.getProtocol();15 System.out.println(the hostname: +url.getHost();16 System.out.println(the port: +url.getPort();17 System.out.println(the file:+url.getFile();18 System.out.println(url.toString();19 20 catch(MalformedURLException e) 21 System.out.println(e);22 23 24 【程序输出结果】 the Protocol: httpthe hostname: the port: -1the file:/chn/index.htm/chn/index.htm【程序注解】 在第13行先实例化一个URL对象url,然后在第1418行分别调用了URL对象的一些基本方法:getProtocol()、getHost()、getPort()和getFile(),分别取得了与URL相应的协议、主机名、端口和文件。如果URL地址不对,在第21行抛出MalformedURLException异常。 URLConnection是一个抽象类,代表与URL指定的数据源的动态连接,URLConnection类提供比URL类更强的服务器交互控制。URLConnection允许用POST或PUT和其他HTTP请求方法将数据送回服务器。在包中只有抽象的URLConnection类,其中的许多方法和字段与单个构造器一样是受保护的,这些方法只可以被URLConnection类及其子类访问。 使用URLConnection 对象的一般方法如下:(1)创建一个URL对象。 (2)调用URL对象的openConnection()方法创建这个URL的URLConnection对象。(3)配置URLConnection。(4)读首部字段。(5)获取输入流并读数据。(6)获取输出流并写数据。(7)关闭连接。 当然我们并不需要完成所有这些步骤。比如我们可以接受URL类的默认设置,则可以不设置URLConnection;还有我们有时仅仅需要从服务器读取数据,并不需要向服务器发送数据,则我们就可以省去获取输出流并写数据这一步。 当创建URLConnection对象后,我们可以使用URLConnection对象的操作方法:public int getContentLength() 获得文件的长度。public String getContentType() 获得文件的类型。public long getDate() 获得文件创建的时间。 public long getLastModified() 获得文件最后修改的时间。public InputStream getInputStream() 获得输入流,以便读取文件的数据。 如果URL类的构造函数的参数有问题,比如字符内容不符合URL位置

温馨提示

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

评论

0/150

提交评论