实验7 成员访问控制与异常

实验7 成员访问控制与异常
实验7 成员访问控制与异常

山西大学计算机与信息技术学院

实验报告

姓名学号专业班级

课程名称 Java实验实验日期

成绩指导教师批改日期

实验名称实验7 成员访问控制与异常

一、实验目的

(l) 理解 Java 包的组织结构 ;

(2) 学会编写带有包结构的程序 ;

(3) 掌握包结构下的成员访问控制。

(4) 掌握基本异常的处理机制;

(5) 熟悉 try 语句与 catch 语句的搭配使用;

(6) 了解有异常处理与没有异常处理的差别;

(7) 多重 catch 语句的使用;

(8) 使用 Throws 声明异常和 Throw 抛出异常。

二、实验要求

编写 3 个类 , 类名分别为 Clock、A、B, 其中类 Clock 和类 A 放在同一个包 packone 中 , 而类 B 则放在另一个包 packtwo 中 , 包 packone 和包 packtwo 放在同一个目录下。类 Clock 中有 3 个整型数据 hour、minute、second, 它们分别是 public、private、protected, 类 Clock 还包含一些方法使用这些数据。类 A 和类 B 的功能相似 , 都是使用类 Clock 并调用类 C1ock 中的方法。请按照下面的实验步骤 , 循序渐进的完成实验 , 并回答后面的问题。

三、包的使用以及访问控制

(1) 首先在 c:\programming 目录下创建一个文件夹 , 命名为 packone, 然后在该文件夹下创建一个名叫 Clock.java 的程序 , 打开文本编辑器按程序清单输入该程序。

程序清单Clock.java

package packone;

public class Clock {

public int hour;

private int minute;

protected int second;

public Clock(int i, int j, int k) {

setAll(i, j, k);

}

void setAll(int i, int j, int k) {

hour = i;

minute = j;

second = k;

}

public int getHour() {

return hour;

}

public int getMinute() {

return minute;

}

public int getSecond() {

return second;

}

}

(2) 接着在 packone 文件夹下创建第二个程序命名为 A.java, 打开文本编辑器按程序清单输入该程序。

程序清单A.java

package packone;

public class A {

public static void main(String[] args) {

Clock c = new Clock(5,20,10);

System.out.println("从类A中访问Clock hour = "+c.getHour());

System.out.println("从类A中访问Clock minute = "+c.minute);

System.out.println("从类A中访问Clock second = "+c.second);

}

}

(3) 现在在 c:\programming 目录下创建第二个文件夹 , 命名为 packtwo, 然后在该文件夹下创建一个名为 B.java 的程序 , 打开文本编辑器按如下程序清单输入该程序。

程序清单B.java

package packtwo;

import packone.*;

class B {

public static void main(String[] args) {

Clock c = new Clock(8,30,5);

System.out.println("从类B中访问Clock hour="+c.getHour());

System.out.println("从类B中访问Clock minute="+c.getMinute());

System.out.println("从类B中访问Clock second="+c.getSecond());

}

}

至此已经编辑好了 3 个源程序 , 然后在Eclipse 环境中分别编译运行packone 文件夹和packtwo 文件夹中的程序,编译的结果将分别在packone 文件夹和packtwo 文件夹中生成Clock.class,A.class 和 B.class 文件。接着分别运行这两个程序 , 观察程序输出结果并分析之。运行结果和分析写在下面。

运行结果:

图一

图二

答:使用private修饰符可以完全隐藏类的成员,在类外不能直接访问它们;使用protected修饰符的类成员,允许任何包中的子类或同一包中的类访问它们;使用public修饰符的类成员,允许任意类访问它们。

思考

(1)现在请将 Clock 类的构造函数 public Clock(int i,int j,int k) 改成 Clock(int i,int

j,int k) 然后分别运行 A.class 和 B.class, 观察所得结果。

图三

图四

答:使用默认修饰符的类不能被其他包中的类访问。

(2)由于在 B.Java 程序中使用了 import packone.* 语句从而导入了 packone 包中的Clock

类 , 但是 import packone.* 这种写法仅仅导入指定包中的 public 类 , 如果现在将

Clock 类的声明 public class Clock 改成 class Clock, 测试一下程序运行会报错吗 ?

答:会报错,如图四。

(3) 用 import 语句可以导入所需的类 , 如果不想使用 import语句, 那么在使用包中的类时就必须带上完整的包路径。现在请把 B.java 程序做如下的修改 :

package packtwo;

class B {

public static void main(String[] args) {

packone.Clock c = new packone.Clock(8,30,5);

System.out.println("从类B中访问Clock hour = "+c.getHour());

System.out.println("从类B中访问Clock minute = "+c.getMinute());

System.out.println("从类B中访问Clock second = "+c.getSecond());

}

}

然后编译运行 , 观察结果是否正确。

图五

(4) 在 A.java 和 B.java 程序中分别通过 getHour()、 getMinute() 和 getSecond() 访问了 Clock 类的数据成员 , 请问能否不通过这几个方法而直接访问 Clock 类的数据成员呢 ? 现在请把 A.Java 程序的相关部分作如下修改来进行测试 , 编译运行观察结果。

System.out.println(" 从类 A 中访问 Clock hour="+c.hour);

System.out.println(" 从类 A 中访问 Clock minute="+c.minute);

System.out.println(" 从类 A 中访问 Clock second= + c.second);

答:如图六知,类Clock成员hour不可被同一包内的其他类直接访问。

图六

接着请把 B.java 程序的相关部分也作类似的修改并进行测试 , 编译运行观察结果。

System.out.println(" 从类 B 中访问 Clock hour="c.hour);

System.out.println(" 从类 B 中访问 Clock minute="+c.minute),

System.out.println(" 从类 B 中访问 Clock second="+c.second);

答:如图七知,类Clock成员hour和second不可被其它包内的类直接访问。

图七

分析上述程序的运行结果 , 然后填写下表 ( 可访问写 1, 不可访问写 0) 。

hour(public)minute(private) second(protected) A类 1 0 1

B类 1 0 0

四、java异常

实验(1)除数为零异常

实验目的 :

(1) 掌握基本异常的处理机制;

(2) 熟悉 try 语句与 catch 语句的搭配使用;

(3) 了解有异常处理与没有异常处理的差别;

(4) 多重 catch 语句的使用;

(5) 使用 Throws 声明异常和 Throw 抛出异常。

实验任务 :

在这个实验里会通过 3 个练习来开发一组相应的异常处理程序 , 以巩固对异常处理的理解。这几个程序都是围绕着一个典型的除数为 0 和数值格式异常问题而展开的 , 用户将从一个最简单的控制台输出的除数为 0 异常程序开始 , 然后建立一个 GUI 环境下的除数为 0 异常的多 catch 块

处理 ,直到最后建立一个 GUI 环境下自己 Throw 抛出异常的处理程序。所有这些程序都将建立在同一个 Project 项目中 , 依次开发 , 各自独立运行。

实验步骤:

1. 练习 1 普通控制台下的除数为 O 异常程序

这个练习可以让用户比较有无异常处理时的情况。

(1) 首先建立一个空项目命名为 Exception, 然后为该项目选择合适的路径 Directory存放它 ,比如 :C: \ Programming \ JavaProject, 用户将在这个项目中开发本实验的所有程序。

(2) 现在在该项目中创建第 1 个程序命名为 DivideByZero.java, 这个程序中包含了一个Public 类 DivideByZero.java, 不使用 Package, 请按照程序清单6-1 输入该程序。

程序清单 6-1 DivideByZero.java

// DivideByZero.java

public class DivideByZero {

private int denominator,numerator,quotient;

public DivideByZero(){

denominator = 3;

numerator = 12;

quotient = quotient(numerator,denominator);

System.out.println("Quotient is "+quotient);

}

public int quotient(int numerator,int denominator){

return numerator/denominator;

}

public static void main(String[] args) {

DivideByZero application = new DivideByZero();

}

}

(3)编辑好源程序并保存 , 编译并运行 , 看到的结果是多少 ? 接下来修改源程序中

的 denominator 值 , 以评估 12/7,12/0 时的情况。当 12/0 时 , 观察到了什么 ? 是否有异常发生 , 输出结果是什么 ?

图八图九

图十

(4) 现在请在工程中创建第 2 个程序命名为 DivideByZeroTryCatch.java, 该程序在上面的程序中加入以下的一组 try/catch 语句块 , 以处理除数为 0 时才发生的异常。

try

{

quotient = quotient( numerator, denominator );

System.out.print("Quotient is " + quotient);

}

catch(ArithmeticException ex)

System.out.print("I found exception " + ex.toString());

}

(5) 编译并运行这个程序 , 观察运行结果。

运行结果贴图:

图十一

|点评| 由于加入了 try/catch 语句 , 因此由函数 quotient(numerator,denominator) 所产生的异常被捕获并进行了处理 , 记住 try/catch 语句必须搭配使用 , 如仅仅有 try 语句而无catch 语句会导致编译错误。

2. 练习2 GUl 图形环境下的多 catch 块异常处理

上面的程序是普通控制台环境下发生除数为 0 异常的情况 , 现在我们要看看 GUI图形环境下的除数为 0 时的异常情况。

(1) 现在在工程中创建第 3 个程序命名为 DivideByZeroGUI.java, 这个程序运行时会弹出图形化窗口 , 要求用户输入数值进行除法运算。请按程序清单 6-2 输入该程序。

程序清单 6-2 DivideByZeroGUI.java

// DivideByZeroGUI.java

import java.awt.*; // Container, GridLayout

import java.awt.event.*; // ActionListener

import javax.swing.*; // JFrame

public class DivideByZeroGUI extends JFrame

implements ActionListener

{

private JTextField numeratorField, denominatorField, outputField;

private int denominator, numerator, quotient;

public DivideByZeroGUI()

{

super( "除数为0异常" );

Container container = getContentPane();

container.setLayout( new GridLayout( 3, 2 ) );

container.add(

new JLabel( "输入被除数 ", SwingConstants.RIGHT ) );

numeratorField = new JTextField( 10 );

container.add( numeratorField );

container.add(

new JLabel( "输入除数并回车 ",

SwingConstants.RIGHT ) );

denominatorField = new JTextField( 10 );

container.add( denominatorField );

denominatorField.addActionListener( this );

container.add(

new JLabel( "结果 ", SwingConstants.RIGHT ) );

outputField = new JTextField();

container.add( outputField );

setSize( 425, 100 );

setVisible( true );

}

public void actionPerformed( ActionEvent event )

{

outputField.setText( "" );

numerator = Integer.parseInt( numeratorField.getText() );

denominator= Integer.parseInt( denominatorField.getText() ); quotient = quotient( numerator, denominator );

outputField.setText( Integer.toString(quotient) );

}

public int quotient( int numerator, int denominator )

{

return numerator / denominator;

}

public static void main( String args[] )

{

DivideByZeroGUI application = new DivideByZeroGUI();

application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

}

(2)编译并运行这个程序,观察运行结果。

运行结果贴图:

思考

(1)评估 12/3,12/7 的结果 , 有异常吗 ? 没有异常。

图十二图十三

(2)评估 12/0,12/2.2,12/a 的结果 , 看到了什么? 是异常吗? 若是异常请解释原因 , 并分别指出导致异常发生的语句。

图十四

图十五

图十六

答:均有异常。其中12/0是由语句“quotient = quotient(numerator,denominator);”与语句“return numerator/denominator;”引起,因为除数不能为零;而12/2.2和12/a是由语句“denominator = Integer.parseInt(denominatorField.getText());”引起,因为输入字符串应可以转换为int型数据。

|点评| 这个程序会因为除数为 0 和数值格式而导致异常 , 不过与前面的练习 l 程序不同的是 , 尽管产生了异常 , 这个基于 GUI 的程序仍然可以继续运行而不会退出 , 这使用户可以继续进行其他的除法运算。

接下来创建程序 DivideByZeroGUIMultiTryCatch.java 以处理上面程序中所产生的异常 , 该程序应包含两个 catch 语句块 , 一个用于处理除数为 0 的异常 , 另一个用于处理数值格式输入的异常。由于在程序中使用了 Integer.parseInt() 方法以获得用户输入的数值 , 因此当用户输

入非整数时就会产生 NumberFormatException 异常 , 这个异常同样应该处理。

catch (NumberFormatException ex)

{

System.out.print("I detected exception " + ex.toString);

}

编译并运行这个 DivideByZeroGUIMultiTryCatch.java 程序 , 确保已经处理了上述的两个异常。评估 12/0,12/1.5,12/e, 并写下所观察到的程序运行结果。

参考代码:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class DivideByZeroGUIMultiTryCatch extends JFrame implements ActionListener{ private JTextField numeratorField,denominatorField,outputField;

private int numerator,denominator,quotient;

public DivideByZeroGUIMultiTryCatch(){

super("除数为0异常");

Container container = getContentPane();

container.setLayout(new GridLayout(3,2));

container.add(new JLabel("输入被除数:",SwingConstants.RIGHT));

numeratorField = new JTextField(10);

container.add(numeratorField);

container.add(new JLabel("输入除数并回车",SwingConstants.RIGHT));

denominatorField = new JTextField(10);

container.add(denominatorField);

denominatorField.addActionListener(this);

container.add(new JLabel("结果:",SwingConstants.RIGHT));

outputField = new JTextField();

container.add(outputField);

setSize(425,100);

setVisible(true);

}

public void actionPerformed(ActionEvent event){

outputField.setText("");

try{

numerator = Integer.parseInt(numeratorField.getText());

denominator = Integer.parseInt(denominatorField.getText());

quotient = quotient(numerator,denominator);

}

catch(ArithmeticException ex){

System.out.println("I found exception "+ex.toString());

}

catch(NumberFormatException ex){

System.out.println("I detected exception "+ex);

}

}

public int quotient(int numerator,int denominator){

return numerator/denominator;

}

public static void main(String []args){

DivideByZeroGUIMultiTryCatch application = new DivideByZeroGUIMultiTryCatch();

application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

运行结果:

图十七

图十八

图十九

3. 练习 3 Throws 声明异常与 Throw 抛出异常

在这个练习中我们要自己使用 Throws 和 Throw 来声明和抛出除数为 0 异常 , 而不是让系统去探测并抛出异常。

首先在工程中创建一个程序文件命名为DivideByZeroThrow.java, 这个程序与前面DivideByZeroGUIMultiTryCatch.java 程序基本一致, 不过要把方法quotient (int numerator,int denominator) 的返回类型改为 double, 并修改返回语句

return(double)numerator/denominator;

修改后 , 编译运行程序 , 评估12/6,12/7,12/0, 看到的结果是什么 ? 有异常发生吗 ? 若没有 , 请解释原因。

参考代码:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class DivideByZeroThrow extends JFrame implements ActionListener{ private JTextField numeratorField,denominatorField,outputField;

private int numerator,denominator;

private double quotient;

public DivideByZeroThrow(){

super("除数为0异常");

Container container = getContentPane();

container.setLayout(new GridLayout(3,2));

container.add(new JLabel("输入被除数:",SwingConstants.RIGHT));

numeratorField = new JTextField(10);

container.add(numeratorField);

container.add(new JLabel("输入除数并回车",SwingConstants.RIGHT));

denominatorField = new JTextField(10);

container.add(denominatorField);

denominatorField.addActionListener(this);

container.add(new JLabel("结果:",SwingConstants.RIGHT));

outputField = new JTextField();

container.add(outputField);

setSize(425,100);

setVisible(true);

}

public void actionPerformed(ActionEvent event){

outputField.setText("");

try{

numerator = Integer.parseInt(numeratorField.getText());

denominator = Integer.parseInt(denominatorField.getText());

quotient = quotient(numerator,denominator);

}

catch(ArithmeticException ex){

System.out.println("I found exception "+ex.toString());

}

catch(NumberFormatException ex){

System.out.println("I detected exception "+ex);

}

outputField.setText(Double.toString(quotient));

}

public double quotient(int numerator,int denominator){

return (double)numerator/denominator;

}

public static void main(String []args){

DivideByZeroThrow application = new DivideByZeroThrow();

application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

运行结果:

图二十

结果分析:

没有发生异常,因为浮点数除以零不会引起异常:在浮点运算中,如果运算结果相对浮点型太大,则向上溢出到无穷大;如果运算结果相对浮点型太小,则向下溢出到零。

当评估 12/7 时 , 因为己转化为 double 型运算 , 其输出结果的小数位数可能很多 ,因此可以想办法只输出 4 位小数 , 为此需要在合适的位置加入以下语句 , 其中 DecimalFormat 是一个控制小数输出格式的类。

import java.text.DecimalFormat;

DecimalFormat precision = new DecimalFormat(“0.0000”);

outputField.setText(precision.format(quotient));

修改之后当运行 l2/7 和 12/0 时 , 观察结果 , 其中∞代表 Infinity。

图二十一

由于当前的程序除 0 时不会产生异常 , 因此现在用户必须自己设法 Throw 抛出一个异常 , 为此要试着修改 quotient() 方法如下 :

public double quotient( int numerator, int denominator ) throws ArithmeticException

{

if (denominator = 0) throw new ArithmeticException();

return (double)numerator / denominator;

}

编译运行修改好的程序 , 当再次运行 12/0 时 , 看到异常了吗 ? 屏幕的输出是否准确地告诉用户这是一个什么异常 , 如果不能 , 请再稍微修改程序 , 以明确显示出这是一个除数为 0 异常。

图二十二

实验(2) 创建自己的日期错误异常类

实验目的 :

(1) 学会创建自己的异常类;

(2) 掌握如何使用自己的异常类;

(3) 了解简单的对话框 JOptioPpane 类的用法。

实验任务 :

要求设计一个 GUI 图形窗口程序 , 该程序让用户输入一个星期中的任意一天的数字1 到 7, 然后输出该数字所对应的是星期几。

但是当用户输入的数字不在 l 到 7 范围内时 , 程序应该弹出一个对话框以显示发生了异常。

实验步骤:

(1) 分析实验任务 , 尽管 Java 中有 ArithmeticException,NumberFormatException等异常类 , 但并没有这里想要的异常类 , 因此用户必须设计自己的异常类 BadDataException 以处理上述情况。同时还要设计一个主类BadDataDays 以运行这个程序, 该主类应包含一个getDayName(int dayNumber) 方法以根据输入值返回星期几 , 在这个方法中应该使用一个 switch 语句来判断 , 并在 switch 块的 default 语句处 Throw 抛出用户的 BadDataException 异常。

(2) 程序清单 6-3 是主类 BadDataDays 的程序模板 , 请完成|代码 1|~ |代码 6| 的程序部分 , 并输入这个程序以运行它。

程序清单 2-3 BadDataDays.java

// BadDataDays.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class BadDataDays extends JFrame implements ActionListener{

private JTextField dayNumberField,dayNameField;

private int dayNumber;

private String dayName;

public BadDataDays(){

super("转换数字在1到7之间");

Container container = getContentPane();

container.setLayout(new GridLayout(2,2));

container.add(new JLabel("输入数字:",SwingConstants.RIGHT));

dayNumberField = new JTextField(10);

container.add(dayNumberField);

dayNumberField.addActionListener(this);

container.add(new JLabel("星期几:",SwingConstants.RIGHT));

dayNameField = new JTextField(10);

container.add(dayNameField);

setSize(425, 100);

this.setVisible(true);

}

public void actionPerformed(ActionEvent event){

dayNameField.setText("");

try{

dayNumber = Integer.parseInt(dayNumberField.getText());

dayName = getDayName(dayNumber);

dayNameField.setText(dayName);

}

catch(BadDataException ex){

JOptionPane.showMessageDialog(BadDataDays.this, ex.toString(),"无效日期",JOptionPane.WARNING_MESSAGE);

}

catch(NumberFormatException ex){

System.out.println("I detected exception "+ex.toString());

}

}

public String getDayName(int dayNumber) throws BadDataException{

switch(dayNumber){

case 1 : return "Monday";

case 2 : return "Tuesday";

case 3 : return "Wednesday";

case 4 : return "Tuesday";

case 5 : return "Friday";

case 6 : return "Saturday";

case 7 : return "Sunday";

default: throw new BadDataException(dayNumber);

}

}

public static void main(String[] args) {

BadDataDays application = new BadDataDays();

application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

class BadDataException extends RuntimeException{

public BadDataException() {}

public BadDataException (int dayNumber) throws BadDataException{

if(dayNumber<1||dayNumber>7) throw new BadDataException();

}

public String toString() {

return "转换数字必须在1至7之间!";

}

}

运行结果:

图二十三

点评该程序的关键是用户设计了自己的异常类BadDataException,它继承自运行期异常类RuntimeException ,通常自定义的异常类都是继承自Exception或RuntimeException,当异常发生时,通过Throw语句抛出这个异常的实例,然后就像捕获一般异常一样进行处理。记住,对自定义异常系统是不会自动抛出的,必须由程序员手动抛出。

课后作业题:

题11.19

使用protected修饰符,可使不同包中的类不能访问这个类,而任何包中的子类都可以访问它。题11.20

若问号被空白或protected代替,类B可以成功编译;若问号被private代替,类B不能成功编译。题11.21

在B.java文件头有添加“import p1.A;”后,若问号被空白或private代替,类B均不可成功编译;若问号被protected代替,类B可成功编译。

题11.23

1.继承:在面对对象设计中,可以从已有的类派生出新类,这就称为继承;

2.父类:如果类C1扩展自另一个类C2,那么C2就称为父类(超类、基类);

3.子类:如果类C1扩展自另一个类C2,那么C1就称为子类(子类、扩展类、派生类);

4.关键字Super和this:两者均为引用类型;其中super是调用父类对象的引用,可以用来调用父类的构造方法和调用父类的方法;this是当前调用对象的引用,可以用来调用当前类的构造方法和调用当前类的成员;

5.转换对象:把一种类类型的对象转换为继承体系结构中另一种类类型的对象;

6.修饰符protected和final:用于指定如何访问类和类的成员的修饰符;前者只能用于类的成员,允许任何包中的子类或同一包中的类访问类的成员;使用final修饰的类或类成员称为终极类或终极方法,可以防止扩展或覆盖;关键字final修饰的方法中的局部变量为常量,不可修改。

题11.24

(1)对(2)错(3)对

(4)错(5)错(6)错

(7)对(8)错

题13.1

Throwable类是所有异常类的根。所有的Java异常类都直接或间接地继承自Throwable。可以通过扩展Exception或Exception的子类来创建自己的异常。

异常类有三种主要的类型:

1)系统错误:由Java虚拟机抛出,用Error类表示,描述内部系统错误;

2)异常:用Exception类表示,描述由程序或外部环境所引起的错误;

3)运行时异常:用RuntimeException类表示,描述程序设计错误。

图a)抛出ArithmeticException异常;

图b)抛出ArrayIndexOutOfBoundsException异常;

图c)抛出StringIndexOutOfBoundsException异常;

图d)抛出ClassCastException异常;

图e)抛出NullPointerException异常;

图f)没有异常,运算结果为Infinity。

题13.3

这段代码存在整数上溢的逻辑异常,但结果并未抛出异常,为-9223372036854774799。

题13.4

声明异常的目的:Java要求方法显示声明除Error和RuntimeException类型的其他必检异常以告知方法的调用者;

声明异常的方法:在方法头使用关键字throws,e.g.:public void m() throws IOException

在一个方法头中可以声明多个异常。

题13.5

RuntimeException和Error都是免检异常,其他所有的异常都是必检异常。

题13.6

抛出异常的方法:使用关键字throw(throw 异常类实例;);

不可以在一个throw语句中抛出多个异常。

题13.8

1)发生异常后,Java虚拟机会抛出异常后被catch块捕获并处理;

2)捕获异常的方法:使用try—catch块;

Try{

Catch(Exception ex){

题13.3

参考代码:

import java.util.*;

public class GetNumber {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

int []array = new int[100];

for(int i=0;i

array[i] = (int)(Math.random()*101);

System.out.println("请输入所要查看数据的下标(0—99):");

int temp = input.nextInt();

try{

System.out.println("您所要查看的数据为:"+array[temp]);

}

catch(ArrayIndexOutOfBoundsException ex){

System.out.println("Out of bounds");

}

}

}

运行结果:

图二十四

网络安全实验报告[整理版]

一Sniffer 软件的安装和使用 一、实验目的 1. 学会在windows环境下安装Sniffer; 2. 熟练掌握Sniffer的使用; 3. 要求能够熟练运用sniffer捕获报文,结合以太网的相关知识,分析一个自己捕获的以太网的帧结构。 二、实验仪器与器材 装有Windows操作系统的PC机,能互相访问,组成局域网。 三、实验原理 Sniffer程序是一种利用以太网的特性把网络适配卡(NIC,一般为以太同卡)置为杂乱模式状态的工具,一旦同卡设置为这种模式,它就能接收传输在网络上的每一个信息包。 四、实验过程与测试数据 1、软件安装 按照常规方法安装Sniffer pro 软件 在使用sniffer pro时需要将网卡的监听模式切换为混杂,按照提示操作即可。 2、使用sniffer查询流量信息: 第一步:默认情况下sniffer pro会自动选择网卡进行监听,手动方法是通过软件的file 菜单下的select settings来完成。 第二步:在settings窗口中我们选择准备监听的那块网卡,把右下角的“LOG ON”勾上,“确定”按钮即可。 第四步:在三个仪表盘下面是对网络流量,数据错误以及数据包大小情况的绘制图。 第五步:通过FTP来下载大量数据,通过sniffer pro来查看本地网络流量情况,FTP 下载速度接近4Mb/s。 第六步:网络传输速度提高后在sniffer pro中的显示也有了很大变化,utiliazation使用百分率一下到达了30%左右,由于我们100M网卡的理论最大传输速度为12.5Mb/s,所以4Mb/s刚好接近这个值的30%,实际结果和理论符合。 第七步:仪表上面的“set thresholds”按钮了,可以对所有参数的名称和最大显示上限进行设置。 第八步:仪表下的“Detail”按钮来查看具体详细信息。 第九步:在host table界面,我们可以看到本机和网络中其他地址的数据交换情况。

JAVA 异常处理实验报告

实验三异常处理 [实验目的] 1.掌握异常处理方法及熟悉常见异常的捕获方法。 [实验内容] 1.练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch 子句的使用。 [实验步骤与要求] 第1题异常处理 要求声明定义两个Exception的异常子类:NoLowerLetter类和NoDigit类。再声明一个People类,该类中的void printLetter(char c)方法抛出NoLowerLetter异常类对象,void PrintDigit(char c)方法抛出NoDigit异常类对象。 [作业提交] 将代码贴在下面: class NoLowerLetter extends Exception{ String message; NoLowerLetter(char c){ message=c+"不是正数"; } public String getMessage(){ return message; } } class NoDigit extends Exception{ String message; NoDigit(char c){ message=c+"不是偶数"; }

public String getMessage(){ return message; } } class People{ public void printLetter(char c) throws NoLowerLetter{ if(c<0){ NoLowerLetter ex=new NoLowerLetter(c); throw(ex); } double number=Math.sqrt(c); System.out.println(c+"的平方根:"+number); } public void PrintDigit(char c) throws NoDigit{ if(c%2!=0){ NoDigit ex=new NoDigit(c); throw(ex); } double number=Math.sqrt(c); System.out.println(c+"的平方根:"+number); } } public class bianma{ public static void main(String args[]){ People p=new People(); try{ p.printLetter('Q'); p.printLetter(' '); } catch( NoLowerLetter e){ System.out.println(e.getMessage()); } try{ p.PrintDigit('d'); p.PrintDigit('a'); } catch( NoDigit e){ System.out.println(e.getMessage()); } } } 将结果运行截屏贴在下面:

实验十一:标准访问控制列表配置

《网络互联技术》课程实验指导书 实验十一:标准访问控制列表配置 当网络管理员想要阻止某一网络的所有通信流量时,或者允许来自某一特定网络的所有通信流量时,或者想要拒绝某一协议簇的所有通信流量时,可以使用标准访问控制列表实现这一目标。 标准ACL检查可以过滤被路由的数据包的源地址、从而允许或拒绝基于网络、子网或主机IP地址的某一协议簇通过路由器出口。 一、网络拓朴 二、实验内容 1、在路由器的E 0/0口添加“ACL 访问控制列表6”并对转出(从路由器端口出来转向交换机或主机)的数据包进行过滤,实现功能:禁止将HostC、HostD的数据包通过路由器E 0/0 口转发到HostA、HostB。其结果是:(对于TCP数据包来说,访问是双向的,只要A不能访问B,则B也将不能访问A) ●HostA和HostB之间可以通信,但无法访问HostC、HostD。 ●HostC和HostD之间可以通信,但无法访问HostA、HostB。 2、在路由器的E 0/1口添加“ACL 访问控制列表10”并对转出(从路由器端口出来转向

交换机或主机)的数据包进行过滤,实现功能:禁止HostA、HostC访问Server E服务器。 由于标准ACL访问控制列表只能根据数据包的源地址来过滤通信流量,因此,应该将ACL 访问控制列表放置离目标地址最近的地方。 三、实验目的 1、掌握标准访问控制列表的原理 2、掌握标准访问控制列表的配置 四、实验设备 1、一台台思科(Cisco)3620路由器 2、两台思科(Cisco)2950二层交换机 3、思科(Cisco)专用控制端口连接电缆 4、四台安装有windows 98/xp/2000操作系统的主机 5、一台提供WWW服务的WEB服务器 6、若干直通网线与交叉网线 五、实验过程(需要将相关命令写入实验报告) 1、根据上述图示进行交换机、路由器、主机的连接 2、设置主机的IP地址、子网掩码和默认网关 3、配置路由器接口 Router> enable Router# configure terminal Router(config)# interface ethernet 0/0 Router(config-if)# ip address 192.168.1.1 255.255.255.0 Router(config-if)# no shutdown Router(config-if)# exit Router(config)# interface ethernet 0/1 Router(config-if)# ip address 192.168.3.1 255.255.255.0 Router(config-if)# no shutdown Router(config-if)# exit Router(config)# interface ethernet 0/2 Router(config-if)# ip address 192.168.2.1 255.255.255.0 Router(config-if)# no shutdown Router(config-if)#exit 4、配置访问控制列表6并将之添加到Ethernet 0/0接口的out方向上 Router(config)# access-list 6 deny 192.168.2.0 0.0.0.255 Router(config)# access-list 6 permit any

计算机网络ACL配置实验报告

计算机网络ACL配置实验报告 件)学院《计算机网络》综合性、设计性实验成绩单开设时间:xx学年第二学期专业班级学号姓名实验题目ACL自我评价本次ACL的实验,模拟实现了对ACL的配置。在实验中,理解ACL对某些数据流进行过滤,达到实现基本网络安全的目的的过程。我加深了对网络中安全的理解,如何控制非法地址访问自己的网络,以及为什么要进行数据过滤,对数据进行有效的过滤,可以使不良数据进入青少年中的视野,危害青少年的身心健康发展。该实验加深了我对网络的理解,同时加强了自身的动手能力,并将理论知识应用到实践当中。教师评语评价指标:l 题目内容完成情况优□ 良□ 中□ 差□l 对算法原理的理解程度优□ 良□ 中□ 差□l 程序设计水平优□ 良□ 中□ 差□l 实验报告结构清晰优□ 良□ 中□ 差□l 实验总结和分析详尽优□ 良□ 中□ 差□成绩教师签名目录 一、实验目的3 二、实验要求3 三、实验原理分析3 四、流程图5 五、配置过程 51、配置信息 52、配置路由器R

1、R 2、R37(1)配置路由器R17(2)配置路由器R27(3)配置路由器R3 83、配置主机PC0、PC18(1)配置PC0的信息8(2)配置PC1的信息 94、配置路由器R2(R1)到路由器R1(R2)的静态路由10(1) 路由器R2到R1的静态路由10(2)路由器R1到R2的静态路由105、配置路由器R2(R3)到路由器R3(R2)的静态路由10(1) 路由器R2到R3的静态路由10(2) 路由器R3到R2的静态路由10六、测试与分析1 11、配置静态路由前1 12、配置好静态路由后1 23、结论13七、体会13实验报告 一、实验目的通过本实验,可以掌握如下技能: (1) ACL的概念(2) ACL的作用(3)根据网络的开放性,限制某些ip的访问(4)如何进行数据过滤 二、实验要求Result图本实验希望result图中PC2所在网段无法访问路由器R2,而只允许主机pc3访问路由器R2的tel 服务 三、实验原理分析ACL 大概可以分为标准,扩展以及命名ACL

访问控制列表ACL配置-实验报告

课设5:访问控制列表ACL的配置 【实验目的】: 1.熟悉掌握网络的基本配置连接 2.对网络的访问性进行配置 【实验说明】: 路由器为了过滤数据包,需要配置一系列的规则,以决定什么样的数据包能够通过,这些规则就是通过访问控制列表ACL定义的。访问控制列表是偶permit/deny语句组成的一系列有顺序的规则,这些规则根据数据包的源地址、目的地址、端口号等来描述。 【实验设备】: 【实验过程记录】:

步骤1:搭建拓扑结构,进行配置 (1)搭建网络拓扑图: (2 虚拟机名IP地址Gateway PC0 PC1 PC2 PC3 PC4 上节课的实验已经展示了如何配置网关和IP地址,所以本次实验将不再展示,其配置对应数据见上表。 (3)设置路由信息并测试rip是否连通

三个路由器均做route操作。 对rip结果进行测试,测试结果为连通。

(4)连通后对访问控制列表ACL进行配置 代码如下: Route(config)#route rip Route(config-route)#net Route(config-route)#net Route(config-route)#exit Route(config)#access-list 1 deny Route(config)#access-list 1 permit any Route(config)#int s3/0 Route(config-if)#ip access-group 1 in Route(config-if)#end

步骤2:检验线路是否通畅 将访问控制列表ACL配置完成后点开PC0进行ping操作,ping 。 检验结果:结果显示目的主机不可达,访问控制列表ACL配置成功。

标准ACL配置与调试

实验5 标准ACL配置与调试 1.实验目标 在这个实验中,我们将在Cisco 2611XM路由器上配置标准ACL。通过该实验我们可以进一步了解ACL的定义和应用,并且掌握标准ACL的配置和调试。 2.实验拓扑 实验的拓扑结构如图1所示。 图1 ACL实验拓扑结构 3.实验要求 根据图1,设计标准ACL,首先使得PC1所在的网络不能通过路由器R1访问PC2所在的网络,然后使得PC2所在的网络不能通过路由器R2访问PC1所在的网络。本实验各设备的IP地址分配如下: ⑴路由器R1: s0/0:192.168.100.1/24 fa0/0:10.1.1.1/8 ⑵计算机PC1: IP:10.1.1.2/8 网关:10.1.1.1 ⑶路由器R2: s0/0:192.168.100.2/24

fa0/0:172.16.1.1/16 ⑷计算机PC2: IP:172.16.1.2/16 网关:172.16.1.1 4.实验步骤 在开始本实验之前,建议在删除各路由器的初始配置后再重新启动路由器。这样可以防止由残留的配置所带来的问题。在准备好硬件以及线缆之后,我们按照下面的步骤开始进行实验。 ⑴按照图1进行组建网络,经检查硬件连接没有问题之后,各设备上电。 ⑵按照拓扑结构的要求,给路由器各端口配置IP地址、子网掩码、时钟(DCE端),并且用“no shutdown”命令启动各端口,可以用“show interface”命令查看各端口的状态,保证端口正常工作。 ⑶设置主机A和主机B的 IP地址、子网掩码、网关,完成之后,分别ping自己的网关,应该是通的。 ⑷为保证整个网络畅通,分别在路由器R1和R2上配置rip路由协议:在R1和R2上查看路由表分别如下: ①R1#show ip route Gateway of last resort is not set R 172.16.0.0/16 [120/1] via 192.168.100.2, 00:00:08, Serial0/0 C 192.168.100.0/24 is directly connected, Serial0/0 C 10.0.0.0/8 is directly connected, FastEthernet0/0 ②R2#show ip route Gateway of last resort is not set C 192.168.100.0/24 is directly connected, Serial0/0 R 10.0.0.0/8 [120/1] via 192.168.100.1, 00:00:08, Serial0/0 C 172.16.0.0/16 is directly connected, FastEthernet0/0 ⑸ R1路由器上禁止PC2所在网段访问:

ACL配置实验报告

南京信息工程大学实验(实习)报告 实验(实习)名称ACL的配置实验(实习)日期得分指导教师刘生计算机专业计科年级 09 班次 03 姓名童忠恺学号 20092308916 1.实验目的 (1)了解路由器的ACL配置与使用过程,会运用标准、扩展ACL建立基于路由器的防火墙,保护网络边界。 (2)了解路由器的NA T配置与使用过程,会运用NA T保护网络边界。 2.实验内容 2.1 ACL配置 (1)实验资源、工具和准备工作。Catalyst2620路由器2台,Windows 2000客户机2台,Windows 2000 Server IIS服务器2台,集线器或交换机2台。制作好的UTP网络连接(双端均有RJ-45头)平行线若干条、交叉线(一端568A,另一端568B)1条。网络连接和子网地址分配可参考图8.39。 图8.39 ACL拓扑图 (2)实验内容。设置图8.39中各台路由器名称、IP地址、路由协议(可自选),保存配置文件;设置WWW服务器的IP地址;设置客户机的IP地址;分别对两台路由器设置扩展访问控制列表,调试网络,使子网1的客户机只能访问子网2的Web服务80端口,使子网2的客户机只能访问子网1的Web服务80端口。 3.实验步骤 按照图8.39给出的拓扑结构进行绘制,进行网络互连的配置。 ①配置路由器名称、IP地址、路由协议(可自选),保存配置文件。 ②设置WWW服务器的IP地址。设置客户机的IP地址。 ③设置路由器扩展访问控制列表,调试网络。使子网1的客户机只能访问子网2的Web服务80端口, 使子网2的客户机只能访问子网1的Web服务80端口。 ④写出各路由器的配置过程和配置命令。 按照图8.38给出的拓扑结构进行绘制,进行网络互连的配置。参考8.5.7节内容。写出各路由器的配置过程和配置命令。

实验 异常处理

实验报告六 一【实验目的】 1.掌握异常的基本概念。 2.理解异常处理机制。 3.掌握创建自定义异常的方法。 二【实验内容】 Java提供了异常处理机制,当程序中发生异常时,程序产生一个异常事件,相应地生成异常对象。系统从生成对象的代码开始,沿方法的调用栈逐层回溯,寻找相应的处理代码,并把异常对象交给该方法处理。 实验1 录入如下源程序: 1、 public class Ex7_1 { public static void main(String[] args) { String output[] ={ "The ","quick ","brown ","fox ","jumps ", "over ","the ","lazy ","dog."}; int i =0; while(i<12){ System.out.print(output[i++]); } System.out.println("haha..."); } } 2、保存程序Ex7_1.java,编译运行程序,观察并分析程序的运行结果。The quick brown fox jumps

over the lazy dog.Exception in thread "main" https://www.360docs.net/doc/847123923.html,ng .ArrayIndexOutOfBoundsException at Ex7_1.main(Ex7_1.java:9),可以看出,在第9行出现了数组下标越界的异常,导致了程序的中止,而程序的最后一条语句“System.out.println("haha...");”没有执行。 运行结果: 3、我们修改程序,加入异常处理,当程序发生异常时,经过异常处理后,程序还可以继续执行。 异常处理代码格式: try{ //可能有问题的代码 } catch(ArrayIndexOutOfBoundsException e) { //处理代码 break; } catch(Exception e1) { /// } catch(…..){ } 修改代码在可能出错的地方加入: try{ // } catch(ArrayIndexOutOfBoundsException e) {

计算机网络实验报告(7)访问控制列表ACL配置实验

一、实验项目名称 访问控制列表ACL配置实验 二、实验目的 对路由器的访问控制列表ACL 进行配置。 三、实验设备 PC 3 台;Router-PT 3 台;交叉线;DCE 串口线;Server-PT 1 台; 四、实验步骤 标准IP访问控制列表配置: 新建Packet Tracer 拓扑图 (1)路由器之间通过V.35 电缆通过串口连接,DCE 端连接在R1 上,配置其时钟频率64000;主机与路由器通过交叉线连接。 (2)配置路由器接口IP 地址。 (3)在路由器上配置静态路由协议,让三台PC 能够相互Ping 通,因为只有在互通的前提下才涉及到方控制列表。 (4)在R1 上编号的IP 标准访问控制。 (5)将标准IP 访问控制应用到接口上。 (6)验证主机之间的互通性。 扩展IP访问控制列表配置: 新建Packet Tracer 拓扑图 (1)分公司出口路由器与外路由器之间通过V.35 电缆串口连接,DCE 端连接在R2 上,配置其时钟频率64000;主机与路由器通过交叉线连接。 (2)配置PC 机、服务器及路由器接口IP 地址。 (3)在各路由器上配置静态路由协议,让PC 间能相互ping 通,因为只有在互通的前提下才涉及到访问控制列表。 (4)在R2 上配置编号的IP 扩展访问控制列表。 (5)将扩展IP 访问列表应用到接口上。 (6)验证主机之间的互通性。 五、实验结果 标准IP访问控制列表配置: PC0: PC1:

PC2:

PC1ping:

PC0ping: PC1ping: 扩展IP 访问控制列表配置:PC0: Server0:

实验7_成员访问控制与异常

山西大学大学计算机与信息技术学院 实验报告 姓名学号专业班级计算机科学与技术 课程名称 Java实验实验日期2014/5/29 成绩指导教师陈千批改日期 实验名称实验7 成员访问控制与异常 一、实验目的 (l) 理解 Java 包的组织结构 ; (2) 学会编写带有包结构的程序 ; (3) 掌握包结构下的成员访问控制。 (4) 掌握基本异常的处理机制; (5) 熟悉 try 语句与 catch 语句的搭配使用; (6) 了解有异常处理与没有异常处理的差别; (7) 多重 catch 语句的使用; (8) 使用 Throws 声明异常和 Throw 抛出异常。 二、实验要求 编写 3 个类 , 类名分别为 Clock、A、B, 其中类 Clock 和类 A 放在同一个包 packone 中 , 而类 B 则放在另一个包 packtwo 中 , 包 packone 和包 packtwo 放在同一个目录下。类 Clock 中有 3 个整型数据 hour、minute、second, 它们分别是 public、private、protected, 类 Clock 还包含一些方法使用这些数据。类 A 和类 B 的功能相似 , 都是使用类 Clock 并调用类 C1ock 中的方法。请按照下面的实验步骤 , 循序渐进的完成实验 , 并回答后面的问题。 三、包的使用以及访问控制 (1) 首先在 c:\programming 目录下创建一个文件夹 , 命名为 packone, 然后在该文件夹下创建一个名叫 Clock.java 的程序 , 打开文本编辑器按程序清单输入该程序。 程序清单Clock.java package packone; public class Clock {

访问控制列表实验

0分计。 4. 实验报告文件以PDF 格式提交。 【实验题目】访问控制列表(ACL )实验。 【实验目的】 1. 掌握标准访问列表规则及配置。 2. 掌握扩展访问列表规则及配置。 3. 了解标准访问列表和扩展访问列表的区别。 【实验内容】 完成教材实例5-4(P190),请写出步骤0安装与建立FTP 、WEB ,的步骤,并完成P192~P193的测试要求。 【实验要求】 重要信息信息需给出截图, 注意实验步骤的前后对比。 【实验记录】(如有实验拓扑请自行画出) 【实验拓扑】 本实验的拓扑图结构如下图: 【实验设备】 路由器一台,PC 5台(其中两台作为WWW Server 和FTP Server )。 【实验原理】 基于时间的ACL 是在各种ACL 规则(标准ACL 、扩展ACL 等)后面应用时间段选项(time-range )以实现基于时间段的访问控制。当ACL 规则应用了时间段后,只有在此时间范围内规则才能生效。此外,只有配置了时间段的规则才会在指定的时间段内生效,其他未引用时间段的规则将不受影响。 要基于时间的ACL 一生效,一般需要下面的配置步骤。

(1)定义时间段及时间范围。 (2)ACL自身的配置,即将详细的规则添加到ACL中。 (3)应用ACL,将设置好的ACL添加到相应的端口中。 【实验步骤】 步骤0: (1)配置3台PC(PC1、PC2和Manager)的IP地址、掩码、网关。 (2)检查PC与服务器的连通性如何? PC与服务器无法连通,因为还未安装FTP Server和WWW Server和配置路由器。 (3)在服务器上安装FTP Server和WWW Server。FTP Server需至少创建一个用户名和口令。 FTP Server我们选择Serv-U,下载安装后见如下界面。

ACL IP访问控制列表配置实验

IP访问控制列表配置 目录: 第一个任务的:验证测试 (3) 第二个任务的:交换机的验证测试 (6) 第三个任务的:扩展访问验证测试 (10) 最后---总结: (12) ▲表示重要的 一、IP标准访问控制列表的建立及应用 工作任务 你是学校网络管理员,学校的财务处、教师办公室和校办企业财务科分属不同的3个网段,三个部门之间通过路由器进行信息传递,为了安全起见,学校领导要求你对网络的数据流量进行控制,实现校办企业财务科的主机可以访问财务处的主机,但是教师办公室主机不能访问财务处主机。 首先对两路由器进行基本配置,实现三个网段可以相互访问;然后对距离控制目的地址较近的路由器RouterB配置IP标准访问控制列表,允许192.168.1.0网段(校办企业财务科)主机发出的数据包通过,不允许192.168.2.0网段(教师办公室)主机发出的数据包通过,最后将这一策略加到路由器RouterB的Fa

0端口,如图所示。 第1步:基本配置 路由器RouterA: R >enable R #configure terminal R(config)#hostname RouterA RouterA (config)# line vty 0 4 VTY是路由器的远程登陆的虚拟端口,04表示可以同时打开5个会话,line vty 04是进入VTY端口,对VTY端口进行配置,比如说配置密码, RouterA (config-line)#login RouterA (config-line)#password 100 RouterA (config-line)#exit RouterA (config)# enable password 100 RouterA (config)#interface fastethernet 0/0 RouterA (config-if)#ip address 192.168.1.1 255.255.255.0 RouterA (config-if)#no shutdown RouterA (config-if)#Exit RouterA (config)#interface s0/3/0 RouterA (config-if)#ip address 192.168.12.1 255.255.255.0 RouterA (config-if)#no shutdown RouterA (config-if)#Exit RouterA (config)#interface s0/3/0 RouterA (config-if)#ip address 192.168.2.1 255.255.255.0 RouterA (config-if)#no shutdown RouterA (config-if)#Exit RouterA (config)#ip route 192.168.3.0 255.255.255.0 192.166.12.2 路由器RouterB: R >enable R #configure terminal R(config)#hostname RouterB RouterB (config)# line vty 0 4 RouterB (config-line)#login RouterB (config-line)#password 100 RouterB (config-line)#exit RouterB (config)# enable password 100 RouterB (config)#interface fastethernet 0/0 RouterB (config-if)#ip address 192.168.3.1 255.255.255.0 RouterB (config-if)#no shutdown RouterB (config-if)#Exit RouterB (config)#interface s0/3/1 RouterB (config-if)#ip address 192.168.12.2 255.255.255.0

实验八 异常处理

实验八异常处理 【开发语言及实现平台或实验环境】 Windows2000 或XP,JDK1.6与Jcreator4.0 【实验目的】 了解Java 中异常处理(exception)的作用。 掌握异常处理的设计方法。 【实验要求】 理解系统异常处理的机制和创建自定义异常的方法。 【实验步骤】 一.了解异常处理机制 1.错误与异常 在程序执行期间,会有许多意外的事件发生。例如,程序申请内存时没有申请到、对象还未创建就被使用、死循环等,称为运行错误。根据错误的性质将运行错误分为错误与异常两种类型。 (1)错误 程序进入了死循环或内存溢出,这类现象称为错误或致命性错误。错误只能在编程阶段解决,运行时程序本身无法解决,只能依靠其它程序干预,否则会一直处于一种不正常的状态。 (2)异常 运算时除数为0,或操作数超出数据范围,打开一个文件时发现文件不存在,网络连接中断等等,这类运行错误现象称为异常。对于异常情况,可在源程序中加入异常处理代码,当程序出现异常时,由异常处理代码调整程序运行流程,使程序仍可正常运行直到正常结束。 由于异常是可以检测和处理的,所以产生了相应的异常处理机制。而错误处理一般由系统承担。 对于一个应用软件,异常处理机制是不可缺少的。程序员必须在程序中考虑每一个可能发生的异常情况并进行处理,以保证程序在任何情况下都能正常运行。事实证明,一个仔细设计了异常处理的程序,可以长时间的可靠运行,而不容易发生致命的错误,如程序被迫关闭、甚至系统终止等等。所以学会进行异常情况处理对于想编写功能完善且具有实用价值的程序员来说是必不可少的。 2.异常发生的原因 (1)Java 虚拟机检测到了非正常的执行状态,这些状态可能是由以下几种情况引起的:·表达式的计算违反了Java 语言的语义,例如整数被0 除。 ·在载入或链接Java 程序时出错。 ·超出了某些资源限制,例如使用了太多的内存。 (2)Java 程序代码中的throw 语句被执行。 (3)异步异常发生。异步异常的原因可能有: ·Thread 的stop 方法被调用。 ·Java 虚拟机内部错误发生。 3.异常处理机制 发生异常后,怎么处理异常呢?Java 提供了异常处理机制来处理异常。分为两个步骤:(1)抛出异常

实验5 异常处理

实验五:java异常处理 实验目的: 1.了解Java异常处理机制的优点 2.了解Java异常的种类 3.掌握异常的捕获与处理 4.掌握异常的抛出 5.熟悉用户自定义异常 6.了解异常处理原则 实验步骤: 一.异常捕获和处理的练习 1. 下面源代码要捕捉的异常是除数为零和数组下标越界。通过修改a和c[]下标值体验程序。 2. 源代码如下: 3. 编写并完善上述代码,编译运行代码,查看程序执行结果。 ●按下条件分别修改数据,编译后运行,观察输出结果,分析在try…catch块里哪些语句没有被执行,为什么?块外哪些语句可被执行到,为什么? (1) 修改a=0,保持c[2]=200; (2) 保持a=10,修改c[3]=200; (3) 修改a=0,修改c[3]=200。

二.自定义异常的定义和使用的练习 1. 设计两个数求商的程序,并设定一个异常类,判断两数相除时,除数是否为零,当除数为零时将抛给自定义异常类,并输出除数为零。 2. 部分源代码如下: 3. 分析上述代码,将division方法体中的代码补充完整,判断输入的除数是否为0。如果为0,要抛出Di visorIsNotZeroException异常;如果不为0,则计算这个数的商。并按要求创建自定义异常类DivisorIsNotZ eroException。在main方法中已经给出如何输入数据和调用所写方法。 4. 代码完善后,编译运行代码,输入下表数据进行验证,如果抛出异常填“Y”,否则填“N”。 表6-2-1 测试数据 ●分析自定义异常是如何创建的?

import java.util.Scanner; class DivisorIsNotZeroException extends Exception { public DivisorIsNotZeroException(String message) { super(message); } } public class MyExceptionTest { public static double division(double dividend, double divisor) throws DivisorIsNotZeroException { Double d = new Double(divisor); if (0 == https://www.360docs.net/doc/847123923.html,pareTo(0.0)) { throw new DivisorIsNotZeroException("除数为0"); } else { return (dividend / divisor); } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入被除数:"); double dividend = sc.nextDouble(); System.out.println("请输入除数:"); double divisor = sc.nextDouble(); try { double result = division(dividend, divisor); System.out.println("计算的商= " + result); } catch(DivisorIsNotZeroException e) { e.printStackTrace(); System.out.println(e.getMessage()); } } }

访问控制列表实验.详解

实验报告如有雷同,雷同各方当次实验成绩均以0分计。 警示 2.当次小组成员成绩只计学号、姓名登录在下表中的。 3.在规定时间内未上交实验报告的,不得以其他方式补交,当次成绩按0分计。 4.实验报告文件以PDF格式提交。 【实验题目】访问控制列表(ACL)实验。 【实验目的】 1.掌握标准访问列表规则及配置。 2.掌握扩展访问列表规则及配置。 3. 了解标准访问列表和扩展访问列表的区别。 【实验内容】 完成教材实例5-4(P190),请写出步骤0安装与建立,的步骤,并完成P192~P193的测试要求。 【实验要求】 重要信息信息需给出截图,注意实验步骤的前后对比。 【实验记录】(如有实验拓扑请自行画出) 【实验拓扑】 本实验的拓扑图结构如下图: 【实验设备】 路由器一台,PC 5台(其中两台作为和)。 【实验原理】 基于时间的ACL是在各种ACL规则(标准ACL、扩展ACL等)后面应用时间段选 项(time-range)以实现基于时间段的访问控制。当ACL规则应用了时间段后,只有在 此时间范围内规则才能生效。此外,只有配置了时间段的规则才会在指定的时间段内生 效,其他未引用时间段的规则将不受影响。 要基于时间的ACL一生效,一般需要下面的配置步骤。 (1)定义时间段及时间范围。 (2)ACL自身的配置,即将详细的规则添加到ACL中。 (3)应用ACL,将设置好的ACL添加到相应的端口中。 【实验步骤】

步骤0: (1)配置3台PC(PC1、PC2和Manager)的IP地址、掩码、网关。(2)检查PC与服务器的连通性如何? PC与服务器无法连通,因为还未安装和和配置路由器。 (3)在服务器上安装和。需至少创建一个用户名和口令。 我们选择Serv-U,下载安装后见如下界面。 先新建域:

实验七 标准IP访问控制列表配置

实验七标准IP访问控制列表配置 一、实验目的 1.理解标准IP访问控制列表的原理及功能。 2.掌握编号的标准IP访问控制列表的配置方法。 二、实验环境 R2600(2台)、主机(3台)、交叉线(3条)、DCE线(1条)。 三、实验背景 你是公司的网络管理员,公司的经理部、财务部和销售部分属于不同的3个网段,三部门之间用路由器进行信息传递,为了安全起见,公司领导要求销售部不能对财务部进行访问,但经理部可以对财务部进行访问 PC1代表经理部的主机,PC2代表销售部的主机,PC3代表财务部的主机。四、技术原理 ACLs的全称为接入控制列表;也称为访问列表,俗称为防火墙,在有的文档中还称之为包过滤。ACLs通过定义一些规则对网络设备接口上的数据报文进行控制:允许通过或丢弃,从而提高网络可管理性和安全性。 IP ACLs分为两种:标准IP访问列表和扩展IP访问列表,标号范围分别为1~99、100~199。 标准IP访问列表可以根据数据包的源IP地址定义规则,进行数据包的过滤。 扩展IP访问列表可以数据包的源IP、目的IP、源端口、目的端口、协议来定义规则,进行数据包的过滤。 IP ACL基于接口进行规则的应用,分为:入栈应用和出栈应用。 五、实验步骤 1、新建拓扑图 2、路由器R1、R2之间通过V.35线缆通过串口连接,DCE端连接在R1上,

配置其时钟频率64000;主机与路由器通过交叉线连接。 3、配置路由器接口IP地址。 4、在路由器R1、R2上配置静态路由协议或动态路由协议,让三台PC能互相 ping通,因为只有在互通的前提下才能涉及到访问控制列表。 5、在R1上配置编号的IP标准访问列表。 6、将标准IP访问控制列表应用到接口上。 7、验证主机之间的互通性。 六、实验过程中需要的相关知识点 1、进入指定的接口配置模式 配置每个接口,首先必须进入这个接口的配置模式模式,首先进入全局配置模式,然后输入进入指定接口配置模式,命令格式如下 例如:进入快速以太网口的第0个端口,步骤是: Router#config terminal Router(config)#interface FastEthernet 1/0 2、配置IP地址 除了NULL接口,每个接口都有其IP地址,IP地址的配置是使用接口必须考虑的,命令如下: Router#config terminal

H3C实验报告大全【含18个实验】17.0-标准ACL

标准ACL 实验人:高承旺 实验名称:标准acl 实验要求: 不让1.1.1.1 ping通3.3.3.3 实验拓扑: 实验步骤: 网络之间开启RIP协议! [R1]rip [R1-rip-1]ver 2 [R1-rip-1]undo summary [R1-rip-1]net 192.168.1.0 [R1-rip-1]net 1.0.0.0 [R1-rip-1]q [R2]rip [R2-rip-1]ver 2 [R2-rip-1]undo summary [R2-rip-1]net 192.168.1.0 [R2-rip-1]net 192.168.2.0

[R2-rip-1]q [R3]rip [R3-rip-1]ver 2 [R3-rip-1]net 192.168.2.0 [R3-rip-1]net 3.0.0.0 [R3-rip-1]q 通3.3.3.3 配置好动态路由后,测试能R1ping 配置ACL访问控制列表 [R2]firewall enable [R2]firewall default permit [R2]acl number ? INTEGER<2000-2999> Specify a basic acl INTEGER<3000-3999> Specify an advanced acl INTEGER<4000-4999> Specify an ethernet frame header acl INTEGER<5000-5999> Specify an acl about user-defined frame or packet head [R2]acl number 2000 [R2-acl-basic-2000]rule ? INTEGER<0-65534> ID of acl rule deny Specify matched packet deny permit Specify matched packet permit [R2-acl-basic-2000]rule deny source 1.1.1.1 ? 0 Wildcard bits : 0.0.0.0 ( a host ) X.X.X.X Wildcard of source [R2-acl-basic-2000]rule deny source 1.1.1.1 0 [R2]int s0/2/0 [R2-Serial0/2/0]firewall packet-filter 2000 ? inbound Apply the acl to filter in-bound packets outbound Apply the acl to filter out-bound packets [R2-Serial0/2/0]firewall packet-filter 2000 inbound

(1405021 21 余铅波)实验5、访问控制列表实验报告.doc

成都工业学院计算机工程系 《路由与交换技术》实验报告 实验名称实验5、访问控制列表实验实验时间2016.05.09 21 学生姓名余铅波班级1405021 学号 指导教师张敏批阅教师成绩 一、实验目的: 在本练习中,您需要完成编址方案、配置路由并实施命名访问控制列表。 二、实验设备: 联网的PC机一台,安装有Windows操作系统,Packet Tracer。 三、实验拓扑图 四、实验内容(实验要求) a.将172.16.128.0/19 划分为两个相等的子网以用于Branch 。 1)将第二个子网的最后一个可用地址分配给Gigabit Ethernet 0/0 接口。 2)将第一个子网的最后一个可用地址分配给Gigabit Ethernet 0/1 接口。 3)将编址记录在地址分配表中。 4)使用适当的编址配置Branch 。 b.使用与B1 连接的网络的第一个可用地址,为B1 配置适当编址。将编址记录在地址分配表 中。 c.根据以下条件,使用增强型内部网关路由协议(EIGRP) 路由配置Branch 。 ?通告所有三个连接网络 ?分配AS 编号1 ?禁用自动总结。 ?将相应接口配置为被动接口 ?使用管理距离5 在序列0/0/0 接口上总结172.16.128.0/19。 d.在 HQ 上设置默认路由,将流量发送到S0/0/1 接口。将路由重新分配给Branch 。 e.使用管理距离5,总结Serial 0/0/0 接口上的 HQ LAN 子网。

f.设计命名访问列表HQServer 以防止任何连接Branch 路由器Gigabit Ethernet 0/0 接口的 计算机访问HQServer.pka 。允许所有其他流量。在相应的路由器上配置访问列表,将其 应用于相应的接口且保证方向正确。 g.设计命名访问列表 BranchServer 以防止任何连接HQ 路由器Gigabit Ethernet 0/0 接口 的计算机访问Branch 服务器的HTTP 和HTTPS 服务。允许所有其他流量。在相应的路由器上配置访问列表,将其应用于相应的接口且保证方向正确。 地址分配表 设备接口IP 地址子网掩码默认网关 HQ G0/0 172.16.127.254 255.255.192.0 未提供 G0/1 172.16.63.254 255.255.192.0 未提供 S0/0/0 192.168.0.1 255.255.255.252 未提供 S0/0/1 64.104.34.2 255.255.255.252 64.104.34.1 分支机构G0/0 未提供G0/1 未提供S0/0/0 192.168.0.2 255.255.255.252 未提供 HQ1 网卡172.16.64.1 255.255.192.0 172.16.127.254 HQ2 网卡172.16.0.2 255.255.192.0 172.16.63.254 HQServer.pka 网卡172.16.0.1 255.255.192.0 172.16.63.254 B1 网卡 B2 网卡172.16.128.2 255.255.240.0 172.16.143.254 BranchServer.pka 网卡172.16.128.1 255.255.240.0 172.16.143.254 五、实验步骤 步骤一:先对分配子网对分支机构的接口做配置 interface GigabitEthernet0/0 ip address 172.16.159.254 255.255.240.0 ip access-group HQServer in duplex auto speed auto interface GigabitEthernet0/1 ip address 172.16.143.254 255.255.240.0 duplex auto speed auto interface Serial0/0/0 ip address 192.168.0.2 255.255.255.252 ip summary-address eigrp 1 172.16.128.0 255.255.224.0 5 步骤二:配置ERGIP协议完成相关配置 router eigrp 1 passive-interface GigabitEthernet0/0

相关文档
最新文档