第14章 Java网络编程.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:12 大小:150KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

第14章 Java网络编程.doc

第14章Java网络编程.doc

预览

免费试读已结束,剩余 2 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Java语言程序设计教程第STYLEREF"标题1"\*MERGEFORMAT第14章Java网络编程第14章Java网络编程用Java开发网络软件非常方便且功能强大,Java的这种力量来源于他独有的一套强大的用于网络的API,这些API是一系列的类和接口,均位于包java.net和javax.net中。在本章中我们将首先介绍Java网络编程中扮演重要角色的InetAddress类,再介绍套接字(Socket)的概念,同时以实例说明如何使用NetworkAPI操纵套接字。最后简单介绍在非连接的UDP协议下如何进行网络通讯。在完成本章的学习后,你就可以编写网络低端通信软件了。14.1InetAddress类简介InetAddress类在网络API套接字编程中扮演了一个重要角色。InetAddress描述了32位或128位IP地址,要完成这个功能,InetAddress类主要依靠Inet4Address和Inet6Address两个支持类。这三个类是继承关系,InetAddrress是父类,Inet4Address和Inet6Address是子类。由于InetAddress类只有一个构造函数,而且不能传递参数,所以不能直接创建InetAddress对象,比如下面的语句就是错误的:InetAddressia=newInetAddress();但我们可以通过下面的5个静态方法来创建一个InetAddress对象或InetAddress数组:(1)getAllByName(Stringhost)方法返回一个InetAddress对象数组的引用,每个对象包含一个表示相应主机名的单独的IP地址,这个IP地址是通过host参数传递的,对于指定的主机,如果没有IP地址存在,那么这个方法将抛出一个UnknownHostException异常对象。(2)getByAddress(byte[]addr)方法返回一个InetAddress对象的引用,这个对象包含了一个IPv4地址或IPv6地址,IPv4地址是一个4字节地址数组,IPv6地址是一个16字节地址数组,如果返回的数组既不是4字节的也不是16字节的,那么方法将会抛出一个UnknownHostException异常对象。(3)getByAddress(Stringhost,byte[]addr)方法返回一个InetAddress对象的引用,这个InetAddress对象包含了一个由host和4字节的addr数组指定的IP地址,或者是host和16字节的addr数组指定的IP地址,如果这个数组既不是4字节的也不是16字节的,那么该方法将抛出一个UnknownHostException异常对象。(4)getByName(Stringhost)方法返回一个InetAddress对象,该对象包含了一个与host参数指定的主机相对应的IP地址,对于指定的主机,如果没有IP地址存在,那么方法将抛出一个UnknownHostException异常对象。(5)getLocalHost()方法返回一个InetAddress对象,这个对象包含了本地主机的IP地址,考虑到本地主机既是客户程序主机又是服务器程序主机,为避免混乱,我们将客户程序主机称为客户主机,将服务器程序主机称为服务器主机。上面讲到的方法均提到返回一个或多个InetAddress对象的引用,实际上每一个方法都要返回一个或多个Inet4Address/Inet6Address对象的引用,调用者不需要知道引用的子类型,相反调用者可以使用返回的引用调用InetAddress对象的非静态方法,包括子类型的多态以确保重载方法被调用。InetAddress和它的子类型对象处理主机名到主机IPv4或IPv6地址的转换,要完成这个转换需要使用域名系统,下面的代码示范了如何通过调用getByName(Stringhost)方法获得InetAddress子类对象的方法,这个对象包含了与host参数相对应的IP地址:InetAddressia=InetAddress.getByName("www.sun.com");一旦获得了InetAddress子类对象的引用就可以调用InetAddress的各种方法来获得InetAddress子类对象中的IP地址信息。例如,可以通过调用getCanonicalHostName()从域名服务中获得标准的主机名;getHostAddress()获得IP地址;getHostName()获得主机名;isLoopbackAddress()判断IP地址是否是一个loopback地址。例14.1InetAddress示例程序InetAddressDemo.javaimportjava.net.*;cl