云南大学软件学院
云南大学软件学院
云南大学软件学院
佚名
【期刊名称】《计算机教育》
【年(卷),期】2004(000)011
【摘要】云南大学软件学院是教育部、国家发改委批准成立的35所国家级示范性软件学院之一,拥有一流的教学设施和实验环境,广泛深入地开展国际学术交流和技术合作。
自2002年4月成立以来,学院发展迅速,成绩显著。
【总页数】2页(P3-4)
【正文语种】中文
【相关文献】
1.软件学院实践性教学模式的研究与构建——以河南省示范性软件学院平顶山学院软件学院实践教学为例 [J], 鲍义东;王小军
2.勇攀高峰育英才--记云南大学软件学院院长李彤 [J], 徐芳芳
3.浅析河南高校软件学院“校企合作”的现状与出路——以河南大学软件学院为例[J], 马飞;王振光
4.示范性软件学院人才培养的实训教学探索与实践——以肇庆学院软件学院为例[J], 蔡文伟;陈航;李革
5.云南大学软件学院校园修建性详细规划 [J],
因版权原因,仅展示原文概要,查看原文内容请购买。
云南大学软件学院Java实验六
云南大学软件学院实验报告姓名:王定欢学号:20141120188专业:软件工程日期:2016-10-27 成绩:JAVA实验六一、实验目的:熟悉类的继承以及子类、抽象类的使用。
会使用子类、抽象类,会使用相关构造方法。
二、实验要求:Part1:Write a program called CollegeCourse that computes the cost of taking a college course. Include a constructor that requires a course ID number.Add a subclass Lab to compute a lab fee for a course that uses a lab. Write a program UseCourse to use the classes. Save the programs as CollegeCourse, Lab, and UseCourse. Put them all in a package called b6.For example, the output could be:The cost of your course is $180.0there is a $25.00 lab fee.The cost of your course is $205.0Part2:Create an abstract Auto(汽车) class with fields for the car make and price. Include get and set methods for these fields; the setPrice() method is abstract.Create two subclasses for individual automobile makers (for example, Ford and Chevy) and include appropriate setPrice() methods in each subclass. Finally, write a program that uses the Auto class and subclasses to display information about different cars.Sample Output:A new Ford costs $20000.0A new Chevy costs $22000.0三、实验内容:Part1、CollegeCourse.javapackage b6;public class CollegeCourse {public static String Id = "a123456";public double computCost(){d ouble cost = 180.0;return cost;}}Lab.javapackage b6;public class Lab extends CollegeCourse{public double LabFee(){double labFee = 25.0;return labFee;}}UseCourse.javapackage b6;public class UseCourse{public static void main(String[] args){CollegeCourse cost = new CollegeCourse();Lab labFee = new Lab();System.out.println("Your course Id is:"+CollegeCourse.Id);System.out.println("The cost of your course is:"+putCost());System.out.println("There is a $"+bFee()+" labFee");System.out.println("The cost of your courseis:"+(putCost()+bFee()));}}实验结果:Your course Id is:a123456The cost of your course is:180.0There is a $25.0 labFeeThe cost of your course is:205.0Part2、Auto.javapackage Auto;abstract class Auto {public String carMake;public double price;public void setMake(String carMake){ this.carMake = carMake;}public String getMake(){return carMake;}abstract void setPrice(double price);abstract double getPrice();}Chevy.javapackage Auto;//抽象类不能实例化对象public class Chevy extends Auto{//重写父类方法void setPrice(double price) {// TODO Auto-generated method stubthis.price = price;}double getPrice() {// TODO Auto-generated method stubreturn price;}}Ford.javapackage Auto;public class Ford extends Auto{//抽象类不能实例化对象,不能声明为抽象类@Override//重写父类方法void setPrice(double price) {// TODO Auto-generated method stubthis.price = price;}double getPrice() {// TODO Auto-generated method stubreturn price;}}AutoTest.javapackage Auto;public class AutoTest {public static void main(String[] args) {// TODO Auto-generated method stubFord f = new Ford();Chevy c = new Chevy();f.setPrice(20000);c.setPrice(22000);System.out.println("A new Ford costs:"+f.getPrice());System.out.println("A new Chevy costs:"+c.getPrice());}}实验结果:Part3、附加题:Shape.javapackage Shape;public abstract class Shape {public Shape(){}public abstract double computePerimeter();public abstract double computeArea();public abstract String getType();}class Circle extends Shape{private double radius;public Circle(double radius){//super();this.radius = radius;}public double computePerimeter(){return Math.pow(radius, 2);}public double computeArea(){return Math.pow(radius, 2)*Math.PI;}public String getType(){return"Circle";}}class Rectangle extends Shape{private double length;private double wide;public Rectangle(double length,double wide){super();this.length = length;this.wide = wide;}public double computePerimeter(){return (length+wide)*2;}public double computeArea(){return length*wide;}public String getType(){return"Rectangle";}}class Triangle extends Shape{private double b1,b2,b3;public Triangle(double b1,double b2,double b3){ super();this.b1 = b1;this.b2 = b2;this.b3 = b3;}public double computePerimeter(){return b1+b2+b3;}public double computeArea(){double s = (b1+b2+b3)/2;return Math.sqrt(s*(s-b1)*(s-b2)*(s-b3));}public String getType(){return"Rectangle";}}ShapeInfo.javapackage Shape;public class ShapeInfo {public void printShapeInfo(Shape s){System.out.println("图像类型:"+s.getType());System.out.println("周长:"+putePerimeter());System.out.println("面积:"+puteArea());}}Test.javapackage Shape;public class Test {public static void main(String[] args) {// TODO Auto-generated method stubShape cir = new Circle(4);Shape rec = new Rectangle(5,8);Shape tri = new Triangle(6,6,6);Shape[] shape = new Shape[3];shape[0] = cir;shape[1] = rec;shape[2] = tri;ShapeInfo info = new ShapeInfo();for(Shape s : shape){i nfo.printShapeInfo(s);}}}实验结果:四、实验总结:通过本次实验,认识到了继承、父类、子类之间的关系,同时还学会了如何灵活运用抽象类,继承抽象类的子类必须对基类中的所有抽象方法进行重写,抽象类不能被实例化。
云南大学软件学院综合技能实践-开发环境实验指导书
云南大学软件学院综合技能实践——《常用开发平台的安装和使用》实验指导书指导教师:梁宇蔡莉(注意:请先简要阅读实验指导书的要求再开始做实验)第一部分 JSP开发环境的搭建一、实验目的:1.掌握JSP开发环境搭建的具体步骤和操作方法。
2.掌握在JSP开发环境下创建一个简单JSP文件的方法。
3.掌握在JSP中创建虚拟目录的方法。
二、实验内容预习一、JSP概述JSP(Java Server Pages,Java服务器主页)技术为创建显示动态生成内容的Web页面提供了个简捷而快速的方法。
JSP技术的设计目的使得构造基于Web 的应用程序更加容易和快捷,这些应用程序能够与各种Web服务器、应用服务器、浏览器和开发工具共同工作。
JSP的明显优势如下:平台和服务器的独立性。
基于Java的JSP与平台无关,它可以使用任何web服务器(包括Apache、IIS和PWS)。
使用的脚本语言。
JSP使用Java作为它的脚本语言,其面向对象的编程思想较为优秀。
JSP跨平台的可重用性。
J3P组件(Enterprise JavaBeans,JavaBeans)都是跨平台可重用的。
EJB(Enterprise JavaBeans,企业级JavaBeans)组件可以访问传统的数据库,并能以分布式系统模式工作于UNIX 和Windows平台。
多样化和功能强大的开发工具支持。
JSP已经有了许多非常优秀的开发工具而是有许多可以免费获取,且其中行许多开发工具已经可以顺利地运行于多种平台之下。
二、建立JSP的运行环境由于JSP使用Java作为程序设计脚本语言,因此需要建立Java的运行环境。
编译和调试运行Java程序,需要安装JDK(Java Develop Kit,Java开发工具包)。
另外,JSP是基于Web的Java应用程序,因而它需要有特定的运行环境,即解释器。
由于Java语言是跨平台的,所以能解释Java语言的Web服务器与平台无关。
示范性软件学院实践教学体系探索与实践(成果简介)
“示范性软件学院实践教学体系构建与实践”成果简介(云南大学软件学院王世普、梁宇、姚绍文、李彤、柳青)云大软件学院成立于2002年4月,是全国35+2所国家示范性软件学院之一。
软件学院人才从申报之日5就确定了国际化、工程型、实用型软件人才培养的目标,并始终致力于工程型人才培养的探索,构建和不断完善了实践教学体系,并通过校院投入、政校合作、校企合作、国际合作等途径进行了大力度的实践教学平台建设、师资队伍建设和实践教学实施。
经过5年多的探索和实践,形成了工程型人才培养的鲜明特色,近三年来,10%左右的学生在国外实习基地完成实训和实习,2/3的学生在校外实习基地实习,毕业生研发能力、工程应用能力、适应能力强,受到用人单位的欢迎和好评。
我们认为,本项目所涉及的实践教学体系构建、教学方法探索、综合实践考核、教学平台构建、信息平台建设,对工科类专业的实践教学具有示范意义。
一、成果主要内容1、构建了示范性软件学院实践教学体系按照国际化、工程型、应用型软件人才培养目标,从示范性软件学院建立开始,就设计和构建了工程型、实用型软件人才培养实践教学体系,该体系由课程实验、综合实践、工程实训、毕业实习4个层次有机组成(如图所示),开设实践课程61门。
1)课程实验课程实验由基础课实验、专业基础课实验、专业课实验、专业方向实验4个部分构成,每门实验课程均制定了教学大纲。
2)综合实践综合实践由综合技能实践、系统设计与实现Ⅰ、系统设计与实现Ⅱ、创新设计4个项目构成。
其中,综合技能实践完成软件技能训练和软硬件系统环境搭建;系统设计与实现Ⅰ、系统设计与实现Ⅱ完成一个完整研发项目;创新设计完成一个与所修专业密切相关的项目研发。
在实施方法上,系统设计与实现Ⅰ、系统设计与实现Ⅱ、创新设计都采用项目制,3-5个学生组成一个项目组,设项目组长一人,项目组在教师指导下查找资料、消化吸收之后提出要完成的开发项目,也可在教师的研发项目中承担安排的研发工作,并在教师的指导下完成项目的研发和文档撰写。
云南大学软件学院软件工程领域工程硕士研究生培养方案
云南大学软件学院软件工程领域工程硕士硕士培养方案(试行)根据国务院学位办[2023]9号文《有关软件工程领域工程硕士培养及学位授予工作有关事宜旳告知》及全国工程硕士教育指导委员会提出旳《有关制定软件工程硕士培养方案旳指导意见》制定本培养方案。
一、培养目旳软件工程领域工程硕士旳培养目旳是面向国民经济与社会信息化以及信息产业发展旳需要,根据企事业单位对软件人才旳需求,培养高层次实用型、复合型旳软件技术人才和软件工程管理人才。
培养规定如下:1、软件工程领域工程硕士专业学位获得者应很好地理解马克思主义、毛泽东思想和邓小平理论;拥护党旳基本路线和方针、政策;热爱祖国,遵纪遵法,具有良好旳职业道德和创业精神,积极为我国经济建设和社会发展服务。
2、软件工程领域工程硕士专业学位获得者应掌握软件工程领域坚实旳基础理论和广阔旳专业知识,具有运用先进旳工程化措施、技术和工具从事软件分析、设计、开发、维护等工作旳能力,以及工程项目旳组织与管理能力、团体协作能力、技术创新能力和市场开拓能力,成为适合软件产业发展规定旳高级技术人才或管理人才。
3、掌握一门外语,具有良好旳阅读、理解和撰写外语资料旳能力和进行国际化交流旳能力。
二、培养方向通过专业理论基础、最新技术工具、系统分析设计措施论、先进项目管理经验旳讲授,针对市场需求,采用加强基础、需求驱动、案例牵引、技术领先、工业合作旳教学原则和培养模式,以先进旳教学设备、良好装备旳试验环境、企业企业试验基地,企业与学校双导师制实行一体化培养方案。
软件工程硕士在现阶段按如下两个方向培养:软件开发技术:在系统化旳软件工程理论学习旳同步,着重培养学生开发软件项目及软件产品所需要旳多种实际应用技能,尤其是软件项目研发旳系统分析措施、开发技术和过程管理。
本专业所涵盖旳知识领域覆盖了开发软件项目所必须旳从项目需求分析到项目旳提交旳软件技术基础,重视理论与实践旳结合,从设计旳角度着力培养学生旳软件系统旳分析能力、设计能力和软件构架能力,从管理旳角度着力培养学生旳软件项目统筹规划能力、软件项目管理控制能力及软件企业项目群管理能力。
云南大学软件硕士简章(1)(1)
自主招收在职攻读软件工程硕士招生简章云南大学作为云南省唯一的“211工程”大学、“省部共建”的全国重点大学,是我国西部历史最悠久的大学之一。
软件学院是经教育部、国家发改委批准,于2002年4月30日建立的全国37所国家示范性软件学院之一。
为适应我国经济建设的需要,加快软件领域高层次人才培养的步伐,根据国务院学位办有关精神,云南大学软件学院可自主招收在职软件工程硕士研究生(Master of Software Engineering, MSE ),即:入学考试可自主命题,自定招生规模,自定录取分数线。
有关招生事宜如下:一、招生对象及条件1、具有大学本科及以上学历证书,部队院校证书经审核合格也可报名;2、2011年的应届本科毕业生也可报名;3、无专业和年龄限制;4、无学位和英语等级要求。
二、招生专业方向特设培养方向:信息化与管理;金融信息工程;教育现代化管理;会计信息化与管理;财政税务信息化;建筑与土木。
三、报名注意事项1、网上申报:网上申报产生报名序列号。
(此工作由报名点代为完成)2、现场提交报名资料:a.《报名资格审查表》一式二份(可在下载),并加盖公章;b.近期同一底片一寸免冠照片3张;c.学历或学位证书原件及复印件各1份;d.身份证原件及复印件各1份。
3、资格审查合格后交报名考试费、考前辅导费。
四、报名时间、地点和考试时间报名时间:即日起至6月30日五、入学考试入学考试分笔试与综合面试:1、笔试科目及参考书目:2、综合面试:综合考察英语口语、时事政治、计算机软件综合知识、工程实践能力和项目管理经历等方面的内容。
六、录取与入学由云南大学自主命题,根据笔试成绩和面试成绩自主录取。
七、学费根据国家计委、财政部、教育部《关于高等学校示范性软件学院收费标准及有关事项的通知》(计价格[2002]665号)和云南省物价局、财政厅、教育厅相关文件精神,云南大学软件学院软件工程硕士学生须缴纳学费总额为35000元(叁万伍仟元),可一次缴清或分两次缴清,云南大学开具正规学费发票。
云南大学软件学院教务管理系统的分析与设计的开题报告
云南大学软件学院教务管理系统的分析与设计的开题报告一、选题背景及意义教务管理系统已经成为现代高等教育管理中不可或缺的一部分。
随着互联网技术的发展,将教务管理系统纳入网络化、智能化、信息化的大环境中,已经成为高校教务管理的趋势。
教务管理系统是支撑学校日常教学、科研、学生管理、教职工管理工作必不可少的信息化手段,大大提高了教务工作的效率和质量。
云南大学软件学院教务管理系统的建设,将有效改善学院教务管理现状,管理员工作效率提高、减轻了工作负担,增强教师、学生和家长的参与感和归属感,最终提高学校的整体竞争力,同时,该系统的开发将为我校软件工程专业的学生提供实践机会,提升学生实际操作的能力,培养学生面对实际问题时的动手实践能力。
二、研究目的(1)了解云南大学软件学院教务管理的痛点和需求。
(2)设计一套完善的教务管理系统,实现教学过程的全面监管、学生信息检索、排课管理、成绩管理等功能。
(3)提高学校办事效率,减轻管理员工作压力,提高学生参与感,优化教学质量,同时推动云南大学软件工程专业课程的实践教学。
三、研究内容和关键技术(1)需求调研。
调研学生和教师的需求和管理需求,了解教务管理系统的基本框架。
(2)数据库设计。
设计教务管理系统的数据库,管理学生、教师、课程等相关信息,并实现合理的数据存储、快速检索、高效的数据处理与查询。
(3)系统设计。
基于网站开发技术和知识,设计教务管理系统界面,实现信息的录入、管理、呈现。
(4)系统测试。
设计测试用例并进行功能测试,确保教务管理系统的有效性,协助系统及时保持更新。
四、研究方法和技术路线(1)需求调研方法。
采用问卷调查、在线调查等方式,针对教师、学生和管理人员进行需求调研。
(2)数据库设计和系统设计方法。
采用UML建模和ERD建模,设计数据模型和系统模型,实现数据和业务逻辑的高效处理。
(3)系统开发方法。
采用现代前端开发技术、后端开发技术和数据库技术,实现教务管理系统的开发,确保其稳定性和安全性。
2019云南大学软件学院硕士研究生拟录取名单
2019云南大学软件学院硕士研究生拟录取名单019 软件学院0835Z1 软件工程理论与方法全日制14696 文俊杰66.54 62.62 非定向就业019 软件学院0835Z1 软件工程理论与方法全日制14699 李柱东85.05 77.94 非定向就业019 软件学院0835Z1 软件工程理论与方法全日制14703 陈代刚63.05 58.70 非定向就业019 软件学院0835Z1 软件工程理论与方法全日制14705 朱东明73.43 68.13 非定向就业019 软件学院0835Z1 软件工程理论与方法全日制14784 彭文钰72.55 69.58 非定向就业019 软件学院0835Z2 软件工程技术全日制14710周小佳64.55 71.18 非定向就业019 软件学院0835Z2 软件工程技术全日制14715普成希74.75 69.26 非定向就业019 软件学院0835Z2 软件工程技术全日制14718杨宇81.50 74.60 非定向就业019 软件学院0835Z2 软件工程技术全日制14719黄欣72.78 65.59 非定向就业019 软件学院0835Z2 软件工程技术全日制30138唐培耕87.50 87.50 非定向就业推免生019 软件学院0835Z3 领域软件工程全日制14734白珂79.51 68.04 非定向就业019 软件学院0835Z3 领域软件工程全日制14750王再霞71.82 70.73 非定向就业019 软件学院0835Z3 领域软件工程全日制14751陈琳洁77.64 67.66 非定向就业019 软件学院0835Z3 领域软件工程全日制14755赵静转62.50 69.40 非定向就业019 软件学院0835Z3 领域软件工程全日制14758贺胜红81.60 71.64 非定向就业019 软件学院0835Z4 数据科学与工程全日制14764 旺咩78.00 71.04 非定向就业019 软件学院0835Z4 数据科学与工程全日制14798 程泰宁73.48 69.71 非定向就业019 软件学院0835Z4 数据科学与工程全日制14801 毕高杉74.16 65.30 非定向就业019 软件学院0835Z4 数据科学与工程全日制14804 张石磊72.32 65.53 非定向就业019 软件学院0835Z5 网络与信息系统安全全日制14741 段永春62.91 64.88 非定向就业019 软件学院0835Z5 网络与信息系统安全全日制14767 李馨湄79.44 67.54 非定向就业019 软件学院0835Z5 网络与信息系统安全全日制14772 张亚80.15 69.98 非定向就业第67 页,共97 页2019(按照学院代码+专业代码+考生编号后五位排序)学院考生编号学院名称专业代码专业名称培养方式姓名复试成绩综合成绩拟录取类别备注代码后五位019 软件学院0835Z5 网络与信息系统安全全日制14794 黄琢玉64.74 67.30 非定向就业019 软件学院0835Z5 网络与信息系统安全全日制14808 刘佳路63.78 65.11 非定向就业019 软件学院0835Z5 网络与信息系统安全全日制14828 李小瑞63.01 65.28 非定向就业019 软件学院0835Z6 人工智能与机器学习全日制10139 吴米85.00 85.00 非定向就业推免生019 软件学院0835Z6 人工智能与机器学习全日制14783 吴子锋78.25 74.74 非定向就业019 软件学院0835Z6 人工智能与机器学习全日制14792 谢江城79.10 72.80 非定向就业019 软件学院0835Z6 人工智能与机器学习全日制14793 王科龙73.68 70.99 非定向就业019 软件学院0835Z6 人工智能与机器学习全日制14811 李成杰67.62 64.73 非定向就业019 软件学院0835Z6 人工智能与机器学习全日制14822 单旭76.70 77.00 非定向就业019 软件学院0835Z6 人工智能与机器学习全日制14825 黄翔76.66 71.70 非定向就业019 软件学院0835Z6 人工智能与机器学习全日制14831 曾左英87.75 74.58 非定向就业019 软件学院0835Z6 人工智能与机器学习全日制14833 王丽69.54 70.42 非定向就业019 软件学院083900 网络空间安全全日制14843 杨佳宁63.50 62.00 非定向就业019 软件学院083900 网络空间安全全日制14844 王煊67.94 60.90 非定向就业019 软件学院085212 软件工程全日制14779 蔡王桢78.75 65.10 非定向就业019 软件学院085212 软件工程全日制14789 诸蕴楼80.00 68.48 非定向就业019 软件学院085212 软件工程全日制14819 聂志深73.27 66.39 非定向就业019 软件学院085212 软件工程全日制14847 王鑫锴76.60 69.76 非定向就业019 软件学院085212 软件工程全日制14860 冯佳男78.34 64.70 非定向就业019 软件学院085212 软件工程全日制14881 彭云宸84.76 66.06 非定向就业019 软件学院085212 软件工程全日制14885 王达82.82 69.13 非定向就业019 软件学院085212 软件工程全日制14886 王基书61.82 56.77 非定向就业019 软件学院085212 软件工程全日制14892 张锦涛89.38 75.71 非定向就业019 软件学院085212 软件工程全日制14906 王浩宇71.76 69.26 非定向就业019 软件学院085212 软件工程全日制14910 杨小波73.70 64.28 非定向就业019 软件学院085212 软件工程全日制14912 陶雨洁75.90 74.28 非定向就业019 软件学院085212 软件工程全日制14919 任首朋62.10 60.72 非定向就业019 软件学院085212 软件工程全日制14921 李磊68.15 69.86 非定向就业019 软件学院085212 软件工程全日制14927 曾辉67.10 61.52 非定向就业019 软件学院085212 软件工程全日制14928 杨海潇80.82 72.05 非定向就业019 软件学院085212 软件工程全日制14931 于明浩77.63 72.45 非定向就业019 软件学院085212 软件工程全日制14934 蒋家昊71.54 66.66 非定向就业019 软件学院085212 软件工程全日制14941 马豫芸70.41 64.16 非定向就业019 软件学院085212 软件工程全日制14951 张兰61.65 61.86 非定向就业019 软件学院085212 软件工程全日制14952 方卉63.56 57.46 非定向就业019 软件学院085212 软件工程全日制14954 汪洋74.44 69.74 非定向就业019 软件学院085212 软件工程全日制14955 汪高健79.56 69.26 非定向就业019 软件学院085212 软件工程全日制14958 李松霖69.82 66.21 非定向就业019 软件学院085212 软件工程全日制14959 黄振弘71.23 65.69 非定向就业第68 页,共97 页2019(按照学院代码+专业代码+考生编号后五位排序)学院考生编号学院名称专业代码专业名称培养方式姓名复试成绩综合成绩拟录取类别备注代码后五位019 软件学院085212 软件工程全日制14965 张书豪65.86 61.02 非定向就业019 软件学院085212 软件工程全日制14972 汪玉金69.13 61.73 非定向就业019 软件学院085212 软件工程全日制14973 向欣76.99 71.96 非定向就业019 软件学院085212 软件工程全日制14976 匡佳一65.36 61.42 非定向就业019 软件学院085212 软件工程全日制14978 吕昌龙70.66 63.30 非定向就业019 软件学院085212 软件工程全日制14980 王强67.73 61.65 非定向就业019 软件学院085212 软件工程全日制14985 尹莉61.91 63.88 非定向就业019 软件学院085212 软件工程全日制14989 王莹港62.33 61.89 非定向就业019 软件学院085212 软件工程全日制14991 周洋66.02 66.37 非定向就业019 软件学院085212 软件工程全日制14992 靳晨阳69.17 61.75 非定向就业019 软件学院085212 软件工程全日制14993 邓建华65.55 59.82 非定向就业019 软件学院085212 软件工程全日制14996 邓强63.04 65.06 非定向就业019 软件学院085212 软件工程全日制15004 王耀威75.22 63.45 非定向就业019 软件学院085212 软件工程全日制15005 汪建昌66.26 59.50 非定向就业019 软件学院085212 软件工程全日制15006 寇勇奇60.92 60.37 非定向就业019 软件学院085212 软件工程全日制15009 王振辉61.27 61.35 非定向就业019 软件学院085212 软件工程全日制15011 饶玉龙78.7780.47 非定向就业019 软件学院085212 软件工程全日制15012 王飞62.43 65.41 非定向就业019 软件学院085212 软件工程全日制15014 邓宏镜81.64 72.26 非定向就业019 软件学院085212 软件工程全日制15015 李勇75.81 70.40 非定向就业019 软件学院085212 软件工程全日制15016 舒超89.80 79.24 非定向就业019 软件学院085212 软件工程全日制15017 索珈顺84.08 72.87 非定向就业019 软件学院085212 软件工程全日制15020 徐明月67.12 61.05 非定向就业019 软件学院085212 软件工程全日制15022 汪煜祺68.58 61.03 非定向就业019 软件学院085212 软件工程全日制15023 王旺旺71.73 61.45 非定向就业019 软件学院085212 软件工程全日制15026 周鼎72.39 63.52 非定向就业019 软件学院085212 软件工程全日制15028 闫萌61.55 58.94 非定向就业019 软件学院085212 软件工程全日制15029 林杨74.53 66.77 非定向就业019 软件学院085212 软件工程全日制15037 何国忠60.25 56.14 非定向就业019 软件学院085212 软件工程全日制15038 包慧琪66.81 60.80 非定向就业019 软件学院085212 软件工程全日制15046 向吉祥65.57 61.75 非定向就业019 软件学院085212 软件工程全日制15047 颜泽明76.83 68.65 非定向就业019 软件学院085212 软件工程全日制15049 吴义明63.44 57.42 非定向就业019 软件学院085212 软件工程全日制15052 吴志伟69.77 65.95 非定向就业019 软件学院085212 软件工程全日制15060 李孟廷63.71 59.68 非定向就业019 软件学院085212 软件工程全日制15066 王湘64.68 65.59 非定向就业019 软件学院085212 软件工程全日制15069 何伟76.46 72.82 非定向就业019 软件学院085212 软件工程全日制15071 周君86.82 74.69 非定向就业019 软件学院085212 软件工程全日制15074 姚谭67.26 60.14 非定向就业第69 页,共97 页2019(按照学院代码+专业代码+考生编号后五位排序)学院考生编号学院名称专业代码专业名称培养方式姓名复试成绩综合成绩拟录取类别备注代码后五位019 软件学院085212 软件工程全日制15078 罗正国66.69 61.24 非定向就业019 软件学院085212 软件工程全日制15081 谢思宇77.28 62.35 非定向就业019 软件学院085212 软件工程全日制15087 彭茂63.20 63.68 非定向就业019 软件学院085212 软件工程全日制70140 吴峰80.00 80.00 非定向就业推免生。
云南大学软件学院信息安全工程实验
云南大学软件学院实验报告课程:信息安全工程实验任课教师:林英姓名:学号:专业:成绩:实验6.防火墙实验一、实验目的:通过实验理解入防火墙的功能和工作原理,学习NAT转换原理,熟悉NAT在一般网络环境中的应用、Linux系统中iptables防火墙以及Windows防火墙的配置和使用。
二、实验原理NAT转换实验:网络地址转换(NAT,Network Address Translation)是Internet工程任务组(IETF,Internet Engineering T ask Force)的一个标准,是把内部私有IP地址转换成合法网络IP地址的技术,允许一个整体机构以一个公用IP地址出现在Internet上。
IPtables防火墙配置实验:IPtables是复杂的,它集成到linux内核中。
用户通过IPtables,可以对进出你的计算机的数据包进行过滤。
通过IPtables命令设置你的规则,来把守你的计算机网络──哪些数据允许通过,哪些不能通过,哪些通过的数据进行记录(log)。
Windows防火墙实验:Windows防火墙是一个基于主机的状态防火墙,它丢弃所有未请求的传入流量,即那些既没有对应于为响应计算机的某个请求而发送的流量(请求的流量),也没有对应于已指定为允许的未请求的流量(异常流量)。
Windows防火墙提供某种程度的保护,避免那些依赖未请求的传入流量来攻击网络上的计算机的恶意用户和程序。
三、实验步骤NAT转换实验一、连接防火墙服务器,开始实验启动实验客户端,选择“防火墙”中的“NAT转换实验”,点击“连接”。
连接成功后,会提示连接成功,主界面会显示连接IP信息及防火墙规则操作画面。
二、添加静态路由打开本地主机cmd命令行,输入route add 172.21.0.0 mask 255.255.0.0 172.20.2.1,添加路由。
三、验证网络连通性输入ping 172.21.3.76,如图所示。
云南大学软件学院实验三、网络虚拟化实验
云南大学软件学院实验报告课程:云计算技术与实践任课教师:梁宇实验指导教师(签名):姓名:学号:专业:日期:成绩:实验二网络虚拟化实验一、实验目标:1.熟悉Openvswitch的安装过程。
2.理解Openvswtich的工作过程和原理。
3.了解虚拟交换机的配置与使用方法4.了解网络虚拟化的基本原理和技术。
二、实验要求在如云计算多租户模式的数据中心环境下,虚拟化技术正从传统的基于虚拟机管理程序的服务器虚拟化,扩展到网络虚拟化。
在这种环境下,基于软件的虚拟交换机通常连同虚拟机管理程序一起部署在服务器上,串联起了不同虚拟机之间传送的流量。
在本实验要求在Ubuntu或CentOS上安装和配置KVM和OpenvSwitch(OVS)。
KVM和Open vSwitch分别是用于如今的云计算数据中心中的最流行的开源虚拟机管理程序和软件虚拟交换机。
三、实验内容和步骤使用openvswitch + kvm可以很快的建立一个虚拟环境,本实验是在实验二的基础上进行的网络虚拟化实验。
通过在实验二安装的Linux操作系统执行以下步骤,所有步骤都假设你可以使用root权限执行命令,本文中的命令均使用root用户执行。
1、安装所需软件①安装kvm计算虚拟化软件#apt-get install kvm virtinst libvirt-bin②安装openvswitch虚拟交换机# apt-get install openvswitch-datapath-source openvswitch-controller openvswitch-brco mpat openvswitch-switch③安装其它相关软件#apt-get install virt-top virt-manager python-libvirt其中virt-manager是gui界面管理虚拟机的,建议安装,本文就是使用virt-manager操作的,当然也可是不安装使用命令行运行kvm,virt-top是查看虚拟机运行状态的,本文中没有用到,python-libvirt是是用python管理虚拟机的类库,安装它是因为我要使用程序获取虚拟机的一些运行信息,如果你习惯用java写程序,需要安装libjna-java,然后下载java 版的libvirt。
云南大学软件学院2011至2012年度期末考试安排
力行楼4202 格物楼1203 格物楼1204 格物楼1203 力行楼4202 文汇楼3208 文汇楼3201 力行楼2303 力行楼2304 力行楼2305 力行楼2306 力行楼2403 力行楼2404 力行楼2405 力行楼2406 力行楼2503 力行楼2503 力行楼2504 力行楼2505 力行楼2506 力行楼2603 力行楼2604 格物楼1204 格物楼1203 力行楼4202 格物楼1203 格物楼1206 力行楼4207 格物楼1203 格物楼1206 力行楼4202 文汇楼3208 文汇楼3201 格物楼1203 格物楼1206 力行楼4202 文汇楼3208 力行楼1201 力行楼1202 力行楼1203 力行楼1205 力行楼2303 力行楼1305 力行楼2304
2011级04班
2011级05班 2010级P03班 2010级P05班 2010级P06班 2011级K01A班 2011级K02AB班 2011级K01B班 2011级P01班 2011级P02班 2011级P03班 2011级P04班 2011级P05班 2011级P06班 2011级P07班 2011级P08班 2011级P09班 2010级 2010数媒 2009 2011 区林 白逸欣 陈卫华 杨勇坚 佘伟 王晓青 邓杉 赵蓉 韩芸 蒋颖 杨敏 史一鸿 王娟 赵楠 杨燕 李浩 代飞 李友宝
12:50-14:50
大学英语
12:50-14:50 12月31日(六)巡 视:康黎明 15:00-17:00
大学英语
大学英语
60 60 50 51 49 46 49 40 40 39 40 40 36 45 45 26 16 50 50 40 40 38 47 50 44 62 60 60 60 60 60 60 60 60 60 60 60 89 86 80 51 42 70 28
云南大学软件学院设计模式期末复习
第一章1. 什么是模式?模式是在物体或事件上,产生的一种规律变化与自我重复的样式与过程。
在模式之中,某些固定的元素不断以可预测的方式周期性重现。
2.什么是设计模式?广义讲,软件设计模式是可解决一类软件问题并能重复使用的软件设计方案;狭义讲,设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。
是在类和对象的层次描述的可重复使用的软件设计问题的解决方案;设计模式是在一个上下文中,对一个问题的解决方案,及其能够达到的效果。
3. 设计模式四要素名称、上下文与问题、解决方案、效果●模式名称(Pattern Name)●问题(Problem):描述应该在何时使用模式。
解释了设计问题和问题存在的前因后果,可能还描述模式必须满足的先决条件;●解决方案(Solution):描述了设计的组成成分、相互关系及各自的职责和协作方式。
模式就像一个模板,可应用于多种场合,所以解决方案并不描述一个具体的设计或实现,而是提供设计问题的抽象描述和解决问题所采用的元素组合(类和对象);●效果(consequences ):描述模式的应用效果及使用模式应权衡的问题4. 设计模式分类23种设计模式:创建型:5种;结构型:7种;行为型:11种5.面向对象的四个基本方法:●抽象(Abstraction)●封装(Encapsulation)●多态(Polymorphism)●继承(Inheritance)6. 面向对象的设计原则开闭原则(OCP):对于扩展是开放的(Open for extension)。
这意味着模块的行为是可以扩展的。
当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。
也就是说,我们可以改变模块的功能。
对于修改是关闭的(Closed for modification)。
对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。
模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。
云南大学软件学院本科学生素质综合测评办法(实施细则)
云南大学软件学院本科学生素质综合测评办法(实施细则)为全面贯彻党的教育方针,提高学生综合素质,培养学生的创新精神和实践能力,努力造就“有理想、有道德、有文化、有纪律”的德智体美全面发展的社会主义事业合格建设者和可靠接班人,全面反映我院学生教育发展水平,特制定本办法实施细则。
一、综合测评成绩的构成学生学年综合测评成绩满分为100分,由思想道德素质分(20分)、学科专业素质分(60分)、身心素质分(10分)、实践能力与技能水平分(10分)四部分构成。
学年综合测评成绩=思想道德素质分+学科专业素质分+身心素质分+实践能力与技能水平分。
综合测评成绩是学生推优保研、评选各类先进的基本依据,是申报各种奖、助学金的主要依据,也是社会各行各业用人单位招聘学生就业的重要依据。
二、参评学生范围国家计划内招收、在我院学习期满一年的全日制本科学生。
三、综合测评成绩的测评(一)思想道德素质分的测评(满分20分)思想道德素质的测评,分基础分和附加分两个部分,满分为20分。
即思想道德素质分=基础分+附加分。
1、基础分(满分10分,每人均加10分)基础分的评定是在学生对上一学年的思想道德素质进行自我总结的基础上,根据学生遵守《高等学校学生行为准则》和校纪校规的情况表现,由班级测评小组审核打分,并在全班公布评分标准和评分结果。
2、附加分(满分10分)(1)政治理论学习(满分1分,每人均加1分)考察学生对马列主义、毛泽东思想邓小平理论及党的方针政策的课堂学习与课外学习情况。
因公共课不便于考勤检查,故每人均加1分。
(2)校纪校规知识学习(满分1.5分)考察学生参加学校学生教育管理规章制度和安全知识的教育和学习情况。
大二测评时,参加过新生校纪校规及安全知识考试,成绩在60-69分者加0.5分;70-79分者加0.8分;80-89分者加1.1分,90分以上者加1.5分(考试成绩只计算整数)。
大三、大四评选时因无测评年度校纪校规考试成绩,每人均可加1分,若无违反校纪校规问题,再加0.5分。
云南大学软件学院设计模式实验 策略模式
云南大学软件学院实验报告序号:姓名:徐鑫桥学号: 20121120034 专业:数字媒体技术日期:成绩:实验一策略模式的运用一、实验目的:策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
在熟悉策略模式相关理论知识的基础上,使用策略模式实现一个小游戏。
二、实验要求:使用策略模式实现一个小游戏,要求如下:1.游戏中有三个角色:和尚,侠女,忍者;2.每个角色都有生命值和魔法值,但各角色不同。
3.各角色外观不同。
4.每个角色具有魔法攻击和物理攻击;5.物理攻击有三种:用刀、用剑、用手;6.魔法攻击也有三种:火系魔法、金系魔法、水系魔法;7.各角色可以动态更换物理、魔法攻击方式,也可以动态选择攻击方法。
1、设计并绘制该程序的类图;2、依照设计的类图使用Java语言编写代码,并实现该程序;3、除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是:a)控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出;b)控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出;c)设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,运行结果文本输出;三、实验内容:类图:相关代码:Role类及其继承类:Role类:public abstract class Role {PhyAttack phyA;MagAttack magA;public Role(){ }public abstract void display();public void performPhy() {phyA.Phy();}public void performMag(){magA.Mag();}public void Appearance() {System.out.println("每个角色外观不同!");}public void LifeMagic(){System.out.println("每个角色生命值和魔法值不同");}public void setPhyAttack(PhyAttack pa){phyA = pa;}public void setMagAttack(MagAttack ma){magA = ma;}}Role继承类:Buddhist类:public class Buddhist extends Role{public Buddhist(){}public void display(){System.out.println("这个角色是和尚");System.out.println("外观:;生命值:100 ;魔法值100");}}Ninjia类:public class Ninjia extends Role{public Ninjia(){}public void display(){System.out.println("这个角色是忍者");System.out.println("外观:;生命值:200;魔法值:35");}}Magicer类:public class Magicer extends Role{public Magicer(){}public void display(){System.out.println("这个角色是侠女");System.out.println("外观:;生命值:75;魔法值:225");}}}MagAttack接口及其相关实现类:接口:public interface MagAttack {public void Mag();}MagFire类:public class MagFire implements MagAttack {public void Mag() {System.out.println("用火系魔法攻击对方");}}MagGold类:public class MagGold implements MagAttack { public void Mag() {System.out.println("用金系魔法攻击对方");}}MagWater类:public class MagGold implements MagAttack { public void Mag() {System.out.println("用金系魔法攻击对方");}}PhyAttack接口及其相关实现类:Phyattack接口:public interface PhyAttack {public void Phy();}PhyKnife类:public class PhyKnife implements PhyAttack { public void Phy() {System.out.println("用刀攻击对方");}}PhySword类:public class PhySword implements PhyAttack { public void Phy() {System.out.println("用剑攻击对方");}}PhyHand类:public class PhyHand implements PhyAttack { public void Phy() {System.out.println("用手攻击对方");}}Show类:public class Show {public static void main(String[] args) {Role Budd=new Buddhist();Budd.display();Budd.setPhyAttack(new PhyHand());Budd.performPhy();Budd.setPhyAttack(new PhyKnife());Budd.performPhy();Budd.setMagAttack(new MagGold());Budd.performMag();Role Magic=new Magicer();Magic.display();Magic.setMagAttack(new MagFire());Magic.performMag();Magic.setMagAttack(new MagWater());Magic.performMag();Magic.setMagAttack(new MagGold());Magic.performMag();Magic.setPhyAttack(new PhyHand());Magic.performPhy();Role Nin=new Ninjia();Nin.display();Nin.setPhyAttack(new PhyKnife());Nin.performPhy();Nin.setPhyAttack(new PhySword());Nin.performPhy();Nin.setPhyAttack(new PhyHand());Nin.performPhy();Nin.setMagAttack(new MagFire());Nin.performMag();System.out.println("20121120034 数字媒体技术徐鑫桥");}}3.测试结果:四、实验总结:通过本次实验,了解了基本策略模式的结构,意图以及使用效果。
云南大学 软件学院 计网实验5
云南大学软件学院实验报告课程:计算机网络原理实验任课教师:姓名:学号:专业:成绩:实验五、传输层可靠传输协议GBN编程实验报告一、实验目的:1、编程实现简单可靠的数据传输GBN协议,模拟可靠数据传输2、理解TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。
二、实验指导:参考教材。
三、实验要求:编程实现一个GBN传输协议,采用编程语言不限,要求能将发送――接收流程以及处理方法表现出来.附源代码及注释并附上实验结果截图。
#include <stdio.h>/* ******************************************************************ALTERNATING BIT AND GO-BACK-N NETWORK EMULATOR: VERSION 1.1 J.F.KuroseThis code should be used for PA2, unidirectional or bidirectionaldata transfer protocols (from A to B. Bidirectional transfer of datais for extra credit and is not required). Network properties:- one way network delay averages five time units (longer if thereare other messages in the channel for GBN), but can be larger- packets can be corrupted (either the header or the data portion)or lost, according to user-defined probabilities- packets will be delivered in the order in which they were sent(although some can be lost).**********************************************************************/#define BIDIRECTIONAL 0 /* change to 1 if you're doing extra credit *//* and write a routine called B_output *//* a "msg" is the data unit passed from layer 5 (teachers code) to layer */ /* 4 (students' code). It contains the data (characters) to be delivered */ /* to layer 5 via the students transport level protocol entities. */ struct msg {char data[20];};/* a packet is the data unit passed from layer 4 (students code) to layer */ /* 3 (teachers code). Note the pre-defined packet structure, which all */ /* students must follow. */struct pkt {int seqnum;int acknum;int checksum;char payload[20];};/********* STUDENTS WRITE THE NEXT SEVEN ROUTINES *********/#define WINDOWSIZE 8#define MAXBUFSIZE 50#define NOTUSED 0#define NACK -1#define TRUE 1#define FALSE 0#define A 0#define B 1int expectedseqnum; /* expected sequence number at receiver side */ int nextseqnum; /* next sequence number to use in sender side */ int base; /* the head of sender window */struct pkt winbuf[WINDOWSIZE]; /* window packets buffer */int winfront,winrear; /* front and rear points of window buffer */ int pktnum; /* packet number of window buffer */struct msg buffer[MAXBUFSIZE]; /* sender message buffer */int buffront,bufrear; /* front and rear pointers of buffer */int msgnum; /* message number of buffer */int packet_lost =0;int packet_corrupt=0;int packet_sent =0;int packet_correct=0;int packet_resent =0;int packet_timeout=0;void ComputeChecksum(packet){ int checksum; int i; checksum = checksum + packet->acknum;for ( i=0; i<20; i++ )checksum = checksum + (int)(packet->payload[i]); checksum = 0-checksum;packet->checksum = checksum;}struct pkt packet;{int checksum;int i;checksum = packet.seqnum;checksum = checksum + packet.acknum;for ( i=0; i<20; i++ )checksum = checksum + (int)(packet.payload[i]);if ( (packet.checksum+checksum) == 0 )return (FALSE);elsereturn (TRUE);}/* called from layer 5, passed the data to be sent to other side */A_output(message){ int i;struct pkt sendpkt;/* if window is not full */if ( nextseqnum < base+WINDOWSIZE ) {printf("----A: New message arrives, send window is not full, send new messge to layer3!\n");/* create packet */sendpkt.seqnum = nextseqnum;sendpkt.acknum = NOTUSED;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = message.data[i];/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (A, sendpkt);/* copy the packet to window packet buffer */winrear = (winrear+1)%WINDOWSIZE;pktnum ++;winbuf[winrear] = sendpkt;for (i=0; i<20; i++)winbuf[winrear].payload[i]= sendpkt.payload[i];/* if it is the first packet in window, start timeout */if ( base == nextseqnum ) {starttimer(A,RTT);printf("----A: start a new timer!\n");}/* update state variables */nextseqnum = nextseqnum+1;}/* if window is full */else {printf("----A: New message arrives, send window is full,");/* if buffer full, give up and exit*/if ( msgnum == MAXBUFSIZE) {printf (" Error: Sender buffer is full! \n");exit (1);}/* otherwise, buffer the message */else {printf("buffer new message!\n");bufrear = (bufrear+1) % MAXBUFSIZE;for (i=0; i<20; i++)buffer[bufrear].data[i] = message.data[i];msgnum ++;}} }B_output(message) /* need be completed only for extra credit */struct msg message;{}/* called from layer 3, when a packet arrives for layer 4 */A_input(packet){ int i;/* if received packet is not corrupted and ACK is received */if ( (CheckCorrupted(packet) == FALSE) && (packet.acknum != NACK) ) { printf("----A: ACK %d is correctly received,",packet.acknum);packet_correct++;/* delete the acked packets from window buffer */winfront = (winfront+(packet.acknum+1-base)) % WINDOWSIZE;pktnum = pktnum - (packet.acknum+1-base);/* move window base */base = packet.acknum+1;stoptimer(A);if ( base < nextseqnum) {starttimer(A,RTT);printf ("send new packets!\n");}/* if buffer is not empty, send new packets */while ( (msgnum!=0) && (nextseqnum<base+WINDOWSIZE) ) {/* create packet */sendpkt.seqnum = nextseqnum;sendpkt.acknum = NOTUSED;buffront = (buffront+1) % MAXBUFSIZE;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = buffer[buffront].data[i];/* computer checksum */ComputeChecksum (&sendpkt);/* if it is the first packet in window, start timeout */ if ( base == nextseqnum ){starttimer(A,RTT);printf ("send new packets!\n");}/* send out packet */tolayer3 (A, sendpkt);/* copy the packet to window packet buffer */winrear = (winrear+1)%WINDOWSIZE;winbuf[winrear] = sendpkt;pktnum ++;/* update state variables */nextseqnum = nextseqnum+1;/* delete message from buffer */msgnum --;}}elseprintf ("----A: NACK is received, do nothing!\n");}/* called when A's timer goes off */{int i;printf("----A: time out,resend packets!\n");/* start timer */starttimer(A,RTT);/* resend all packets not acked */for ( i=1; i<=pktnum; i++ ) {packet_resent++;tolayer3(A,winbuf[(winfront+i)%WINDOWSIZE]);}}/* the following routine will be called once (only) before any other */ /* entity A routines are called. You can use it to do any initialization */ A_init(){buffront = 0;bufrear = 0;msgnum = 0;winfront = 0;winrear = 0;pktnum = 0;}/* Note that with simplex transfer from a-to-B, there is no B_output() *//* called from layer 3, when a packet arrives for layer 4 at B*/B_input(packet){ int i;/* if not corrupted and received packet is in order */if ( (CheckCorrupted(packet) == FALSE) && (packet.seqnum == expectedseqnum)){ printf("----B: packet %d is correctly received, send ACK!\n",packet.seqnum);/* send an ACK for the received packet *//* create packet */sendpkt.seqnum = NOTUSED;sendpkt.acknum = expectedseqnum;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = '0';/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (B, sendpkt);/* update state variables */expectedseqnum = expectedseqnum+1;/* deliver received packet to layer 5 */tolayer5(B,packet.payload);}/* otherwise, discard the packet and send a NACK */else {printf("----B: packet %d is corrupted or not I expects, send NACK!\n",packet.seqnum);/* create packet */sendpkt.seqnum = NOTUSED;sendpkt.acknum = NACK;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = '0';/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (B, sendpkt);}}/* called when B's timer goes off */{}{expectedseqnum = 0;}/********************************************************************************** NETWORK EMULATION CODE STARTS BELOW ***********The code below emulates the layer 3 and below network environment:- emulates the tranmission and delivery (possibly with bit-level corruption and packet loss) of packets across the layer 3/4 interface- handles the starting/stopping of a timer, and generates timerinterrupts (resulting in calling students timer handler).- generates message to be sent (passed from later 5 to 4)THERE IS NOT REASON THAT ANY STUDENT SHOULD HAVE TO READ OR UNDERSTANDTHE CODE BELOW. YOU SHOLD NOT TOUCH, OR REFERENCE (in your code) ANYOF THE DATA STRUCTURES BELOW. If you're interested in how I designedthe emulator, you're welcome to look at the code - but again, you should have to, and you defeinitely should not have to modifyint eventity; /* entity where event occurs */struct pkt *pktptr; /* ptr to packet (if any) assoc w/ this event */ struct event *prev;struct event *next;};struct event *evlist = NULL; /* the event list *//* possible events: */#define TIMER_INTERRUPT 0#define FROM_LAYER5 1#define FROM_LAYER3 2#define OFF 0#define ON 1#define A 0#define B 1int TRACE = 1; /* for my debugging */int nsim = 0; /* number of messages from 5 to 4 so far */ int nsimmax = 0; /* number of msgs to generate, then stop */ float time = 0.000;float lossprob; /* probability that a packet is dropped */float corruptprob; /* probability that one bit is packet is flipped */ float lambda; /* arrival rate of messages from layer 5 */ int ntolayer3; /* number sent into layer 3 */int nlost; /* number lost in media */int ncorrupt; /* number corrupted by media*/main(){char c;init();A_init();B_init();while (1){eventptr = evlist; /* get next event to simulate */if (eventptr==NULL)goto terminate;evlist = evlist->next; /* remove this event from event list */ if (evlist!=NULL)evlist->prev=NULL;if (TRACE>=2){printf("\nEVENT time: %f,",eventptr->evtime);printf(" type: %d",eventptr->evtype);if (eventptr->evtype==0)printf(", timerinterrupt ");else if (eventptr->evtype==1)printf(", fromlayer5 ");elseprintf(", fromlayer3 ");printf(" entity: %d\n",eventptr->eventity);}time = eventptr->evtime; /* update time to next event time */ if (nsim==nsimmax)break; /* all done with simulation */ if (eventptr->evtype == FROM_LAYER5 ){generate_next_arrival(); /* set up future arrival *//* fill in msg to give with string of same letter */j = nsim % 26;for (i=0; i<20; i++)msg2give.data[i] = 97 + j;if (TRACE>2) {printf(" MAINLOOP: data given to student: ");for (i=0; i<20; i++)printf("%c", msg2give.data[i]);printf("\n");}nsim++;if (eventptr->eventity == A)A_output(msg2give);elseB_output(msg2give);}else if (eventptr->evtype == FROM_LAYER3){pkt2give.seqnum = eventptr->pktptr->seqnum;pkt2give.acknum = eventptr->pktptr->acknum;pkt2give.checksum = eventptr->pktptr->checksum;for (i=0; i<20; i++)pkt2give.payload[i] = eventptr->pktptr->payload[i];if (eventptr->eventity ==A) /* deliver packet by calling */A_input(pkt2give); /* appropriate entity */elseB_input(pkt2give);free(eventptr->pktptr); /* free the memory for packet */ }else if (eventptr->evtype == TIMER_INTERRUPT){if (eventptr->eventity == A)A_timerinterrupt();elseB_timerinterrupt();}else{printf("INTERNAL PANIC: unknown event type \n");}free(eventptr);}terminate:printf(" Simulator terminated at time %f\n after sending %d msgs from layer5\n",time,nsim);printf(" correctly sent pkts: %d \n", packet_correct);printf(" resent pkts: %d \n", packet_resent);}init() /* initialize the simulator */{int i;float sum, avg;float jimsrand();FILE *fp;fp = fopen ("parameter.txt","r");printf("----- Stop and Wait Network Simulator Version 1.1 -------- \n\n"); printf("Enter the number of messages to simulate: ");fscanf(fp,"%d",&nsimmax);scanf("%d",&nsimmax);printf("Enter packet loss probability [enter 0.0 for no loss]:");fscanf(fp, "%f",&lossprob);scanf("%f",&lossprob);printf("Enter packet corruption probability [0.0 for no corruption]:");fscanf(fp,"%f",&corruptprob);scanf("%f",&corruptprob);printf("Enter average time between messages from sender's layer5 [ > 0.0]:"); fscanf(fp,"%f",&lambda);scanf("%f",&lambda);printf("Enter TRACE:");fscanf(fp,"%d",&TRACE);scanf("%d",&TRACE);srand(9999); /* init random number generator */sum = 0.0; /* test random number generator for students */for (i=0; i<1000; i++)sum=sum+jimsrand(); /* jimsrand() should be uniform in [0,1] */avg = sum/1000.0;if (avg < 0.25 || avg > 0.75) {printf("It is likely that random number generation on your machine\n" ); printf("is different from what this emulator expects. Please take\n");printf("a look at the routine jimsrand() in the emulator code. Sorry. \n"); exit(1);}ntolayer3 = 0;nlost = 0;ncorrupt = 0;time=0.0; /* initialize time to 0.0 */generate_next_arrival(); /* initialize event list */}/****************************************************************************//* jimsrand(): return a float in range [0,1]. The routine below is used to *//* isolate all random number generation in one location. We assume that the*//* system-supplied rand() function return an int in therange [0,mmm] *//****************************************************************************/ float jimsrand(){double mmm = 65535; /* largest int 2147483647 65535 - MACHINE DEPENDENT!!!!!!!! */float x; /* individual students may need to change mmm */x = rand()/mmm; /* x should be uniform in [0,1] */return(x);}/********************* EVENT HANDLINE ROUTINES ****2147483647***//* The next set of routines handle the event list *//*****************************************************/generate_next_arrival(){double x,log(),ceil();struct event *evptr;char *malloc();float ttime;int tempint;if (TRACE>2)printf(" GENERATE NEXT ARRIVAL: creating new arrival\n");x = lambda*jimsrand()*2; /* x is uniform on [0,2*lambda] *//* having mean of lambda */evptr = (struct event *)malloc(sizeof(struct event));evptr->evtime = time + x;evptr->evtype = FROM_LAYER5;if (BIDIRECTIONAL && (jimsrand()>0.5) )evptr->eventity = B;elseevptr->eventity = A;insertevent(evptr);}struct event *p;{struct event *q,*qold;if (TRACE>2){printf(" INSERTEVENT: time is %lf\n",time);printf(" INSERTEVENT: future time will be %lf\n",p->evtime);}q = evlist; /* q points to front of list in which p struct inserted */ if (q==NULL){ /* list is empty */evlist=p;p->next=NULL;p->prev=NULL;}else{for (qold = q; q !=NULL && p->evtime > q->evtime; q=q->next)qold=q;if (q==NULL){ /* end of list */qold->next = p;p->prev = qold;p->next = NULL;}else if (q==evlist){ /* front of list */p->next=evlist;p->prev=NULL;p->next->prev=p;evlist = p;}else{ /* middle of list */p->next=q;p->prev=q->prev;q->prev->next=p;q->prev=p;}}}{struct event *q;int i;printf("--------------\nEvent List Follows:\n");for(q = evlist; q!=NULL; q=q->next) {printf("Event time: %f, type: %d entity: %d\n",q->evtime,q->evtype,q->eventity);}printf("--------------\n");}int AorB; /* A or B is trying to stop timer */{struct event *q,*qold;if (TRACE>2)printf(" STOP TIMER: stopping timer at %f\n",time);/* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */for (q=evlist; q!=NULL ; q = q->next)if ( (q->evtype==TIMER_INTERRUPT && q->eventity==AorB) ) {/* remove this event */if (q->next==NULL && q->prev==NULL)evlist=NULL; /* remove first and only event on list */else if (q->next==NULL) /* end of list - there is one in front */q->prev->next = NULL;else if (q==evlist) { /* front of list - there must be event after */ q->next->prev=NULL;evlist = q->next;}else { /* middle of list */q->next->prev = q->prev;q->prev->next = q->next;}free(q);return;}printf("Warning: unable to cancel your timer. It wasn't running.\n");starttimer(AorB,increment)int AorB; /* A or B is trying to stop timer */float increment;{struct event *q;struct event *evptr;char *malloc();if (TRACE>2)printf(" START TIMER: starting timer at %f\n",time);/* be nice: check to see if timer is already started, if so, then warn */ /* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */for (q=evlist; q!=NULL ; q = q->next)if ( (q->evtype==TIMER_INTERRUPT && q->eventity==AorB) ) {printf("Warning: attempt to start a timer that is already started\n"); return;}/* create future event for when timer goes off */evptr = (struct event *)malloc(sizeof(struct event));evptr->evtime = time + increment;evptr->evtype = TIMER_INTERRUPT;evptr->eventity = AorB;insertevent(evptr);}tolayer3(AorB,packet)int AorB; /* A or B is trying to stop timer */struct pkt packet;{struct pkt *mypktptr;struct event *evptr,*q;char *malloc();float lastime, x, jimsrand();int i;ntolayer3++;/* simulate losses: */if (jimsrand() < lossprob){nlost++;if (TRACE>0)printf(" TOLAYER3: packet being lost\n");return;}/* make a copy of the packet student just gave me since he/she may decide */ /* to do something with the packet after we return back to him/her */ mypktptr = (struct pkt *)malloc(sizeof(struct pkt));mypktptr->seqnum = packet.seqnum;mypktptr->acknum = packet.acknum;mypktptr->checksum = packet.checksum;for (i=0; i<20; i++)mypktptr->payload[i] = packet.payload[i];if (TRACE>2){printf(" TOLAYER3: seq: %d, ack %d, check: %d ", mypktptr->seqnum, mypktptr->acknum, mypktptr->checksum);for (i=0; i<20; i++)printf("%c",mypktptr->payload[i]);printf("\n");}/* create future event for arrival of packet at the other side */evptr = (struct event *)malloc(sizeof(struct event));evptr->evtype = FROM_LAYER3; /* packet will pop out from layer3 */evptr->eventity = (AorB+1) % 2; /* event occurs at other entity */evptr->pktptr = mypktptr; /* save ptr to my copy of packet *//* finally, compute the arrival time of packet at the other end.medium can not reorder, so make sure packet arrives between 1 and 10time units after the latest arrival time of packetscurrently in the medium on their way to the destination */lastime = time;/* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */for (q=evlist; q!=NULL ; q = q->next)if ( (q->evtype==FROM_LAYER3 && q->eventity==evptr->eventity) ) lastime = q->evtime;evptr->evtime = lastime + 1 + 9*jimsrand();/* simulate corruption: */if (jimsrand() < corruptprob){ncorrupt++;if ( (x = jimsrand()) < .75)mypktptr->payload[0]='Z'; /* corrupt payload */else if (x < .875)mypktptr->seqnum = 999999;elsemypktptr->acknum = 999999;if (TRACE>0)printf(" TOLAYER3: packet being corrupted\n");}if (TRACE>2)printf(" TOLAYER3: scheduling arrival on other side\n");insertevent(evptr);}int AorB;char datasent[20];{int i;if (TRACE>2) {printf(" TOLAYER5: data received: ");for (i=0; i<20; i++)printf("%c",datasent[i]);printf("\n");}}函数结构解释:函数其他部分定义在每个函数后面一坐定义,此处只给出main函数部分的函数结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
云南大学软件学院
实验报告
姓名:学号:班级:网络工程指导教师:刘春花成绩:
实验五 GRE VPN配置实验
一.实验目的:
1.基本掌握配置GRE VPN。
二.实验要点:
1.配置GRE VPN,熟悉私网通过建立VPN隧道在公网络传输数据。
三.实验设备:
路由器Cisco五台,连线若干。
四、实验环境
五、实验步骤
1.建立如上图所示的网络拓扑结构,图中Internet使用路由器R5来模拟。
2.配置基础网络环境
(1)配置R1:
R1(config)#int f0/0
R1(config-if)#ip address 10.1.1.1 255.255.255.0 R1(config-if)#no sh
R1(config)#int F0/1
R1(config-if)#ip add 100.1.1.1 255.255.255.0 R1(config-if)#no sh
R1(config)#ip route 0.0.0.0 0.0.0.0 100.1.1.5
(2)配置R2:
R2(config)#int f0/0
R2(config-if)#ip add 10.1.1.2 255.255.255.0 R2(config-if)#no sh
R2(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.1
(3)配置R3:
R3(config)#int f0/0
R3(config-if)#ip add 200.1.1.1 255.255.255.0
R3(config-if)#no sh
R3(config)#int f0/1
R3(config-if)#ip address 192.168.1.3 255.255.255.0 R3(config-if)#no sh
R3(config)#ip route 0.0.0.0 0.0.0.0 200.1.1.5
(4)配置R4:
R4(config)#int f0/1
R4(config-if)#ip add 192.168.1.4 255.255.255.0
R4(config-if)#no sh
R4(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.3
(5)配置R5:
R5(config)#int f0/1
R5(config-if)#ip add 100.1.1.5 255.255.255.0 R5(config-if)#no sh
R5(config)#int f0/0
R5(config-if)#ip add 200.1.1.5 255.255.255.0 R5(config-if)#no sh
2.测试基础网络环境
(1)查看R5的路由表:
(2)测试上海分公司路由器R1到北京分公司路由器R3的连通性:
(3)测试上海分公司R2直接使用私有地址192.168.1.4到北京分公司R4的连通性:
(4)跟踪上海分公司R2到北京分公司的路径信息,并分析结果?
根据结果可知,数据只能到达10.1.1.1 即Router1的f0/0口,只有这一个路径信息。
原因是未添加隧道,因此从上海分公司R2到北京分公司的路径跟踪不能正常进行。
3.在上海分公司与北京分公司之间配置GRE隧道
(1)在上海分公司路由器R1上配置连接到北京分公司路由器R3的GRE隧道:
R1(config)#interface tunnel 1
R1(config-if)#ip address 1.1.1.1 255.255.255.0
R1(config-if)#tunnel source 100.1.1.1(或者是相应接口)
R1(config-if)#tunnel destination 200.1.1.1
R1(config-if)#exit
(2)查看R1当前的隧道接口状态:(主要查看隧道状态是否已经up)
R1#show interfaces tunnel 1
(3)在北京分公司路由器R3上配置连接到上海分公司路由器R1的GRE隧道:R3(config)#interface tunnel 3
R3(config-if)#ip address 1.1.1.2 255.255.255.0
R3(config-if)#tunnel source 200.1.1.1
R3(config-if)#tunnel destination 100.1.1.1
R3(config-if)#exit
(4)查看R3当前的隧道接口状态:(主要查看隧道状态是否已经up)
R3#show interfaces tunnel 3
4.测试GRE隧道
(1)测试R1与R3之间的GRE隧道连通性:
R1#ping 1.1.1.2
(2)再次测试上海分公司R2直接使用私有地址192.168.1.4到北京分公司R4的连通性:
R2#ping 192.168.1.4
要解决此问题,必须让流量从GRE隧道中传输。
(3)在创建GRE隧道的路由器双方将去往对方私有网段的数据包引入GRE隧道中传输:
R1:
R1(config)#ip route 192.168.1.0 255.255.255.0 tunnel 1(或者是对端的IP地址1.1.1.2)
R3:
R3(config)#ip route 10.1.1.0 255.255.255.0 tunnel 3(或者是对端的IP地址1.1.1.1)
(4)再次测试上海分公司R2直接使用私有地址192.168.1.4到北京分公司R4的连通性:
R2#ping 192.168.1.4
(5)再次跟踪上海分公司R2到北京分公司的路径信息:
R2#traceroute 192.168.1.4
六.实验总结
1.简述GRE VPN的工作原理。
GRE(Generic Routing Encapsulation)即通用路由封装协议,是对某些网络层协议(如IP和IPX)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如IP)中传输。
GRE是VPN(Virtual Private Network)的第三层隧道协议,即在协议层之间采用了一种被称之为Tunnel(隧道)的技术。
GRE 提供了将一种协议的报文封装在另一种协议报文中的机制,使报文能够在异种网络中传输,异种报文传输的通道称为tunnel 。
GRE即为在发送隧道口封装报文,在接收隧道口解封报文。
从Tunnel接口收到的IP报文,通过检查目的地址,发现目的地就是此路由器时,去掉IP报头,再交给GRE协议处理后,去掉GRE报头后,再交由IPX协议象对待一般数据报一样对此数据报进行处理。
系统收到一个需要封装和路由的数据报,称之为净荷(Payload),这个净荷首先被加上GRE封装,成为GRE报文;再被封装在IP报文中,这样就可完全由IP层负责此报文的向前传输(Forwarded)。
2.总结实验中所出现的问题和解决的办法。
如图所示,在进行隧道配置连接时,不能使用隧道源端口的IP地址进行配置,必须换用隧道源相应接口后能够正常执行命令并进行相应配置,这样才能配置成功;后续配置中只要出现IP地址或是相应借口配置的,都必须使用相应借口进行配置,不能使用IP地址。