实验03 InetAddress.docx
- 文档编号:24735046
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:26
- 大小:596.99KB
实验03 InetAddress.docx
《实验03 InetAddress.docx》由会员分享,可在线阅读,更多相关《实验03 InetAddress.docx(26页珍藏版)》请在冰豆网上搜索。
实验03InetAddress
课程名称:
网络程序设计
实验名称:
实验三
学生姓名:
王家玲
指导教师:
朱辉
学生学号:
04122087
专业班级:
网络工程1203
日期:
2015/3/26
一.本实验目的及要求:
1.熟练掌握IPv4地址分类和域名的概念;
2.熟练掌握InetAddress类和其生成InetAddress对象的方法(getLocalHost(),getByName(),getAllByName(),getByAddress()等);
3.熟练掌握URL类和其方法(getProtocol(),getHost(),getPort(),getFile(),getRef()等),可对指定的URL地址进行解析;
4.掌握使用System.getProperties()获得JVM系统信息;
5.利用newString(strValue.getBytes(“ISO8859_1”),“GBK”)构造方法,实现指定字符集之间的转换。
6.实验报告内容应包括,本实验的第三、四、五部分的答案,以及第六部分的程序后要求。
二、基础知识
1.InetAddress类
在网络API套接字,InetAddress类和它的子类型对象使用域名DNS系统,处理主机名到主机IPv4或IPv6地址的转换。
如图1-1所示。
图2-2InetAddress类结构
由于InetAddress类只有一个构造函数,且不能传递参数,所以不能直接创建该对象实例,比如下面的做法就是错误的:
InetAddressia=newInetAddress();×
可通过以下5个成员方法获得InetAddress对象或InetAddress数组:
●getAllByName(Stringhost)方法返回一个InetAddress对象的引用,每个对象包含一个表示相应主机名的单独的IP地址,这个IP地址是通过host参数传递的,例如:
InetAddress[]ia=getAllByName(“MyHost”);
●getByAddress(byte[]addr)方法返回一个InetAddress对象的引用,这个对象包含了一个Ipv4地址或Ipv6地址,Ipv4地址是一个4字节数组,Ipv6地址是一个16字节地址数组。
●getByAddress(Stringhost,byte[]addr)方法返回一个InetAddress对象的引用,这个InetAddress对象包含了一个由host和4字节的addr数组指定的IP地址,或者是host和16字节的addr数组指定的IP地址。
●getByName(Stringhost)方法返回一个InetAddress对象,该对象包含了一个与host参数指定的主机相对应的IP地址。
●getLocalHost()方法返回一个InetAddress对象,这个对象包含了本地机的IP地址。
以上各方法均可能产生的UnknownHostException(未知的主机名)异常。
当获得了InetAddress类对象的引用就可以调用InetAddress的各种方法来获得InetAddress子类对象中的IP地址信息。
例,通过调用getCanonicalHostName()从域名服务中获得标准的主机名,getHostAddress()获得IP地址,getHostName()获得主机名,isLoopbackAddress()判断IP地址是否是一个loopback环回地址。
2.URL类
IP地址唯一标识了Internet上的计算机,而URL则标识了这些计算机上的资源。
通常,URL是一个包含了传输协议、主机名称、服务端口号、文件路径名称,以及间隔符号“:
//”、“:
”、“/”等信息的字符串,例:
:
80/homepage/search.jsp?
Key=JAVA
为了方便程序员编程,JDK中提供了URL类,该类的全名是.URL,该类用于使用它的各种方法来对URL对象进行分割、合并等处理,如图2-2所示。
图1-2URL类结构
URL有6种构造方法,通常使用了绝对URL路径构造方法,其中的URL参数是一个完整的URL字符串,而且必须要包含传输协议,如:
URL raceHtml=newURL("");
四、常用方法
1.InetAddress类主要方法
byte[]
getAddress()返回该对象的原始IP。
static InetAddress[]
getAllByName(String host)获得指定主机域名的所有IP地址。
static InetAddress
getByAddress(byte[] addr)获得指定IP地址对象。
static InetAddress
getByAddress(String host,byte[] addr)根据指定主机名和IP地址创建对象。
static InetAddress
getByName(String host)根据指定主机名获得对象。
String
getCanonicalHostName()获得指定域名的法定信息。
String
getHostAddress()返回当前IP地址字符串。
String
getHostName()获得当前IP地址的主机名。
static InetAddress
getLocalHost()获得本地主机。
boolean
isLoopbackAddress()判断IP是否为环回地址。
2.URL类主要方法
String
getAuthority()获得URL的认证部分。
Object
getContent()获得URL的内容。
Object
getContent(Class[] classes)获得URL的内容
int
getDefaultPort()获得URL默认的端口号
String
getFile()获得URL的文件名
String
getHost()获得该URL的主机名
String
getPath()获得该URL的路径
int
getPort()获得该URL的端口
String
getProtocol()获得该URL的协议。
String
getQuery()获得该URL的查询部分
String
getRef()获得该URL的锚部分
String
getUserInfo()获得该URL的用户信息
URLConnection
openConnection()返回URL的连接。
InputStream
openStream()打开URL的输入读取流
四.概念填空
1.所有的公开的IP地址由国际组织(NIC)分配,全球有3个网络信息中心,分别是(InerNIC)、(ENIC)、(APNIC)。
2.在IPv4中,A类IP地址以0开头,B类IP地址以(10)开头,C类IP地址以(110)开头,D类IP地址用于(1110),E类IP地址是(11110)。
3.在IPv4地址日益枯竭的现状,国际IP管理组织推出了3组内部自由分配的IP地址,分别是A类(10.0.0.0~10.255.255.25),B类(172.16.0.0~172.31.255.255)和C类(192.168.0.0~192.168.255.255)。
4.InetAddress是InternetAddress的缩写,为了满足IPv4和IPv6的需求,它有2个子类,分别是(Inet4Address)和(Inet6Address)。
5.InetAddress类不能通过构造方法获得对象,只能通过(InetAddressgetLocalHost())、(InetAddressgetByName())、(InetAddressgetAllByName())、(InetAddressgetByAddress())、(StringgetHostName())等获得InetAddress类对象。
6.URL的作用是(对网络中的资源进行统一定位和管理),其标准格式为(<访问方法>:
//<用户名>:
<密码>@<主机>:
<端口>/<路径>[?
参数])。
7.中文简体编码为(GB2312(国际码)),繁体中文编码为(BIG--5)。
8.利用JAVA语言如何获得系统信息(通过调用System类getProperties()方法得到)。
9.在JAVA语言中,采用(String类)进行指定字符串的转换。
五.程序填空
1.基础InetAddress程序
(import.*;)//引用网络类库包
importjava.util.*;
classmyJava{
publicstaticvoidmain(String[]args){
(try){//异常处理
InetAddressinet=(InetAddress).getByName(“abc”);//类名
System.out.println(inet.toString());
}catch(Exceptione){
System.err.println(__e.getMessage()__);//获得异常信息
}
}
}
2.扫描指定网段的主机情况
import.*;
importjava.util.*;
classmyJava{
publicstaticvoidmain(String[]args){
StringnetString=“192.168.1.0”;
try{
for(inti=0;i InetAddressinet=InetAddress.getByName(netString+i); System.out.println(inet.toString()); }catch(Exceptione){ System.err.println(e.getMessage()); } } } 六、实验内容 1.该例程使用InetAddress类,用于获得指定的计算机名称和IP地址,在该程序示例中,需要将各注释程序段一一测试运行。 import.*; importjava.util.*; classInetAddressDemo{ publicstaticvoidmain(String[]args)throwsUnknownHostException{ //练习一,获得本地主机信息 /* InetAddresslocalAddress=InetAddress.getLocalHost(); System.out.println(localAddress); */ //练习二,获得指定域名主机的信息 /* Stringhost=""; InetAddressaddress=InetAddress.getByName(host); System.out.println(address); */ //练习三,根据指定域名获得所有信息 /* Stringhost="";//注意获得的所有IP地址 InetAddress[]addresses=InetAddress.getAllByName(host); for(InetAddressaddress: addresses) System.out.println(address); */ //练习四,比较根据localhost和计算机名获得信息的不同 Stringhost="localhost";//更改localhost为你现在所使用计算机名,查看不同 InetAddressia=InetAddress.getByName(host); System.out.println("CanonicalHostName="+ia.getCanonicalHostName()); System.out.println("HostAddress="+ia.getHostAddress()); System.out.println("HostName="+ia.getHostName()); System.out.println("IsLoopbackAddress="+ia.isLoopbackAddress()); //练习五,获得本地主机所有IP地址 /* Enumeration try{ netInterfaces=NetworkInterface.getNetworkInterfaces(); while(netInterfaces.hasMoreElements()){ NetworkInterfaceni=netInterfaces.nextElement(); System.out.println("DisplayName: "+ni.getDisplayName()); System.out.println("Name: "+ni.getName()); Enumeration while(ips.hasMoreElements()){ System.out.println("IP: "+ips.nextElement().getHostAddress()); } } }catch(Exceptione){ e.printStackTrace(); } */ //练习六,根据IP地址构造InetAddress /* byte[]ip=newbyte[]{(byte)202,(byte)117,(byte)128,7};//可以更改数值超过255 InetAddressaddress1=InetAddress.getByAddress(ip); InetAddressaddress2=InetAddress.getByAddress("",ip); System.out.println(address1); System.out.println(address2); */ }}} 报告内容: 将以上程序段分别取消注释和运行,并将运行结果截图 使用InetAddress类获得本校或计算机学院的WWW、FTP、MAIL等服务器信息。 截图一: 截图二: 截图三: 截图四: 截图五: 截图六: 2.向Windows系统的hosts文件中注册一个域名和IP解析,再使用getByName()方法查看结果。 一.找到: C: \WINDOWS\system32\drivers\etc\hosts 在该文件中添加一行域名与IP的对应行,例如: 192.168.18.100 二.再执行 import.*; importjava.util.*; classInetAddressDemo{ publicstaticvoidmain(String[]args)throwsUnknownHostException{ Stringhost=""; InetAddressaddress=InetAddress.getByName(host); System.out.println(address); } } 3.修改hosts文件名为hosts.txt,再执行第二步程序;修改ip地址为888.888.888.888,再执行第二步程序;在ip地址前添加空格“”或其它任意非数字字符。 再观察运行结果。 报告内容: 将运行结果截图 更改后,运行结果不变。 3.该例程采用了URL类,用于解析在单行编辑框中输入的URL地址,分解出访问协议、主机名称、端口号以及文件路径名称等。 import.URL; import.MalformedURLException; classmyURL{ URLurl; publicmyURL(StringurlStr){ try{ url=newURL(urlStr); }catch(Exceptione){ System.err.println(e.getMessage()); } } publicvoidresolve(){ System.out.println(url.getProtocol()); System.out.println(url.getHost()); System.out.println(url.getPort()); System.out.println(url.getPath()); System.out.println(url.getFile()); System.out.println(url.getQuery()); System.out.println(url.getRef()); } publicstaticvoidmain(String[]args){ myURLmy= newmyURL("http: //222.24.16.1: 8080/home/index.jsp#new? key=java"); my.resolve(); }} 报告内容: 将运行结果截图 //图形化的URL输入和分析 import.URL; import.MalformedURLException; importjava.awt.*; importjava.awt.event.*; classgetURLInformationextendsFrame{ TextFieldtUrl=newTextField("输入URL地址"); ListlItems=newList(20); ButtonbOk=newButton("解析"); Fontf=newFont("Serif",Font.BOLD,30); publicgetURLInformation(){ this.setLayout(newBorderLayout()); this.add(tUrl,BorderLayout.NORTH); this.add(lItems,BorderLayout.CENTER); this.add(bOk,BorderLayout.SOUTH); tUrl.setFont(f); lItems.setFont(f); bOk.setFont(f); addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ dispose(); System.exit(0); } }); bOk.addActionListener(newListener()); } publicstaticvoidmain(Stringargs[]){ System.out.println("StartingNew..."); getURLInformationmainFrame=newgetURLInformation(); mainFrame.setSize(400,400); mainFrame.setTitle("解析URL"); mainFrame.setVisible(true); } classListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ URLgetURL=null; try{ getURL=newURL(tUrl.getText()); }catch(MalformedURLExceptione1){ System.out.println("URL解析错误"+e1); } lItems.add("Reference: "+getURL.getRef(),0); lItems.add("FileName: "+getURL.getFile(),0); lItems.add("FilePath: "+getURL.getPath(),0); lItems.add("HostPort: "+getURL.getPort(),0); lItems.add("HostName: "+getURL.getHost(),0); lItems.add("Protocol: "+getURL.getProtocol(),0); }}} 报告内容: 在输入URL时,分别更改以下内容,分别记录运行结果: 1)缺省或笔误访问协议,例如输入URL: 或htp: // 2)使各部分间隔符号残缺或误用,例如输入URL: http: /或http/: /index.html 3)修改端口号超过65535 4.通过URL获得网页上文本和图像资源 //获得文本资源 importjava.io.*; import.*; classexp_4_7{ publicstaticvoidmain(String[]args)throwsException{ Stringurl="填入任意网页URL";//自行输入URL,例如www.xupt.edu.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验03 InetAddress 实验 03