微机原理软件实验程序

2023-03-13

第一篇:微机原理软件实验程序

微机原理微机原理课程设计程序.asm

微机原理课程设计程序

CODE

SEGMENT

ASSUME

CS:CODE; 初始化8255A,A口工作方式0,输出 START: MOV

DX,63H

MOV

AL,08BH

MOV

BL,OAH

OUT

DX,AL DY:

MOV

CX,30C4H;置定时外循环初始值 MM:

MOV

BH,0AH;置定时内循环初始值

DEC

LP:

MOV

IN

DEC

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

JMP

LP1:

MOV

MOV

JMP

LP2:

MOV

MOV

JMP

LP3:

MOV

MOV

CX DX,62H AL,DX;读取C口值 BH BH,00H MM CX,0000H XD;转向剩余时间显示程序 AL,00H;判断是否有键按下 LP AL,01H;判断是否是1号键按下 LP1 AL,02H;判断是否是2号键按下 LP2 AL,04H;判断是否是3号键按下 LP3 AL,08H;判断是否是4号键按下 LP4 AL,10H;判断是否是5号键按下 LP5 AL,20H;判断是否是6号键按下 LP6 AL,40H;判断是否是7号键按下 LP7 AL,80H;判断是否是8号键按下 LP8 LP AL,86H AH,01H EN

;显示1号抢答成功者并锋鸣

AL,0CBH AL,02H EN

;显示2号抢答成功者并锋鸣

AL,0CFH AH,0CFH

JMP

EN

;显示3号抢答成功者并锋鸣 LP4:

MOV

AL,0E6H

MOV

AH,08H

JMP

EN

;显示4号抢答成功者并锋鸣 LP5:

MOV

AL,0EDH

MOV

AH,10H

JMP

EN

;显示5号抢答成功者并锋鸣 LP6:

MOV

AL,0FDH

MOV

AH,20H

JMP

LP7:

MOV

MOV

JMP

LP8:

MOV

MOV

JMP

EN:

MOV

OUT

MOV

MOV

OUT

JMP

XD:

DEC

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

CMP

JZ

XD9:

MOV EN

;显示6号抢答成功者并锋鸣 AL,87H AH,40H EN

;显示7号抢答成功者并锋鸣 AL,0FFH AH,80H EN

;显示8号抢答成功者并锋鸣 DX,60H DX,AL DX,61H AL,AH DX,AL MD BL

;判断剩余时间并转向显示程序 BL,09H XD9 BL,08H XD8 BL,07H XD7 BL,06H XD6 BL,05H XD5 BL,04H XD4 BL,03H XD3 BL,02H XD2 BL,01H XD1 BL,00H XD0 AL,6FH;显示剩余9秒

JMP

EN1 XD8:

MOV

AL,7FH;显示剩余8秒

JMP

EN1 XD7:

MOV

AL,07FH;显示剩余7秒

JMP

EN1 XD6:

MOV

AL,7DH;显示剩余6秒

JMP

EN1 XD5:

MOV

AL,6DH;显示剩余5秒

JMP

EN1 XD4:

MOV

JMP

XD3:

MOV

JMP

XD2:

MOV

JMP

XD1:

MOV

JMP

XD0:

MOV

JMP

EN1:

MOV

OUT

CMP

JZ

JMP

MD:

MOV

IN

CMP

JZ

JMP

MOV

INT

CODE

ENDS

END

AL,66H;显示剩余4秒

EN1 AL,4FH;显示剩余3秒

EN1 AL,4BH;显示剩余2秒

EN1 AL,06H;显示剩余1秒

EN1 AL,3FH;显示剩余0秒,结束。

EN1 DX,60H DX,AL AL,3FH MD DY DX,61H;一定时间后,若再有输入,则转向某剩余时间AL,DX AL,00H MD DY AH,4CH 21H START

第二篇:微机原理实验总结

不知不觉,微机原理与接口技术实验课程已经结束了。回想起来受益匪浅,主要是加深了对计算机的一些硬件情况和运行原理的理解和汇编语言的编写汇编语言,对于学习机电工程的自动控制和计算机都是很重要的,因为它是和机器语言最接近的了,如果用它来编程序的话,会比用其它高级语言要快得多。本学期我们在老师的带领下,进行了微机原理实验六到十这五组实验。它们分别是: 实验六

8255 PA口控制PB口

实验目的

掌握单片机系统中扩展外围芯片的方法,了解 8255 芯片的结构及编程方法。 实验内容

用 8255 PA 口作开关量输入口,PB 口作输出口。

实验步骤

1、用8 芯线将8 255 PA口接至开关Kl~K8,PB口接至发光二极管L1~L8;

2、运行程序 HW06.ASM,拨动开关K1~K8,观察L1~L8发光二极管是否对应点亮。

实验七

8255控制交通灯

实验目的

进一步了解8 255 芯片的结构及编程方法,学习模拟交通控制的实现方法。

实验内容

用8255 做输出口,控制六个发光二极管燃灭,模拟交通灯管理。

实验步骤

1、用双头线将 8 255 PA0~PA2 口接至发光二极管L3~L1,PA3~PA5口接至发光二极管L7~L5;

2、执行 程序HW07.ASM,初始态为四个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后东西路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,再切换到东西路口方向,之后重复以上过程。 实验八

简单I /O口扩展

实验目的

学习单片机系统中扩展简单I/O 口的方法; 学习数据输入输出程序的编制方法。 实验内容

利用74LS244 作为输入口,读取开关状态,并将此状态,通过74LS273再驱动发光二极管显示出来。

五、实验步骤

1、用8 芯线将Y0~Y7接至开关K1~K8,Q0~Q7 接至发光二极管L1~L8, 用双头线将 CS1 接至8 000 孔,CS2 接至9 000 孔,用8 芯线将J X0 接至JX7(D0~D7数据线);

2、执行程序 HW08.ASM,按动开关K1~K8,观察发光二极管L1~L8是否对应点亮。

实验九

A/D 0809转换实验

实验目的

)掌握A/D 转换与单片机接口的方法;

)了解A/D 芯片0809转换性能及编程方法;

)通过实验了解单片机如何进行数据采集。 实验内容

利用实验系统上的 0809 做A /D 转换器,实验系统上的电位器提输入,编制程序,将模拟量转换成数字,通过数码管显示出来。 实验步骤

1、用双头线将可调电压区的VOUT接至ADC0809 模数转换区的IN0,可调电压区的VIN 接至电源+5V,ADC0809 模数转换区的CS4 接至系统接口区的8000H 端口,ADC0809模数转换区的WR接至系统接口区的/IOWR端口,ADC0809 模数转换去的 RD 接至系统接口区的/IORD,ADC0809 模数转换区的ADDA、ADDB、ADDC接至G ND,CLK接至单脉冲与时钟区的500K,用8 芯线将数据总线JX0 接至A DC0809模数转换区的JX6;

2、运行程序 HW09.ASM,数码管上显示0809.XX,后二位显示当前采集的电压转换的数字量,调节可调电压,该二位将随着电压变化而相应变化,变化范围为00至FF。

实验十

D/A 0832转换实验

实验目的

(1)了解D/A 转换与单片机的接口方法;

(2)了解D/A 转换芯片 0832 的性能及编程方法;

(3)了解单片机系统中扩展D/A 转换芯片的基本方法。

实验步骤

1、用双头线将DAC0832 数模转换区的CS5 端口接至系统接口区的8000H端口,WR端口接至系统接口区的/IOWR端口,AOUT输出接电压表或小直流电机DJ,用8 芯线将DAC0832 数模转换区的JX2 接至数据总线JX0

2、运行程序HW10.ASM,数码管上显示不断加大或减小的数字量,数字变化范围 00 到FF,用万 用表测试 D/A 输出孔 AOUT 应能测出不断加大或减小的电压值,电压变化范围 0V 到5V。

这次实验课程加深了我们对汇编语言指令的熟悉和理解。不仅巩固了书本所学的知识,还具有一定的灵活性,发挥了操作,加深了我们对硬件的熟悉,锻炼了动手能力,发挥创造才能。

通过这次课程使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

这门课程可以阐明微处理器,汇编语言程序设计,计算机结构和操作系统等基本概念。详尽地论述了有关微处理器及其指令系统的概念和程序设计方法,介绍构成微型计算机的存储器,接口部件,总线等各项技术。.微机的最基础语言--汇编语言是一个最基础最古老的计算机语言,依赖于计算机的低级程序设计语言。汇编语言是我们理解整个计算机系统的最佳起点和最有效途径。汇编是对寄存的地址,以及数据单元进行最直接的修改,而在某些时候,这种方法的确是最有效,也是最可靠的.然而有优点,自然也就有缺点,最重要的一点就是汇编语言很繁琐,对某个数据进行修改时,本来很简单一个操作会用很多条繁琐的语句来解决,而这些语句本身在执行和操作的过程中,占用大量的时间和成本。并有大量的程序和硬件设计类题目,使我们能够深入了解计算机的原理、结构和特点,以及如何运用这些知识来设计一个实用的微型计算机系统。具体来说,就是掌握Intel8086/8088微型计算机系统地组成原理,熟练运用8086宏汇编语言进行程序设计,熟悉各种I/O接口芯片的配套使用技术,并通过一定的课程实验与实践,进一步提高系统设计的能力,使学生能够完成实用的微型计算机系统的软硬件设计。

学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。

这次实验并不是很难,主要的困难来自对程序的理解。我们最后对实验的原理有了清晰的认识。让我们知道了实验台上各个模块的用法;而且它还让我们对自己动手写程序来控制实验台的运作有了一定的基础。虽然实验台只是一个小型的模拟平台,但是通过对它的学习和操作,我们对有关接口的知识将会有一个更广泛的认识,而且它对我们以后的学习也会有帮助的。

实验中个人的力量是不及群体的力量的,我们分工合作,做事的效率高了很多。虽然有时候会为了一些细节争论不休,但最后得出的总是最好的结论。而且实验也教会我们在团队中要善于与人相处,与人共事,不要一个人解决所有问题。 总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力 对课程设计的建议

本次课程设计的几个实验相对都比较简单,而且经过老师的讲解以及实验书上的指导,几乎把我们要用到的程序和实验台电路的接线方法都告诉我们了,所以做起来很容易。

实验过程中,获得了很多收获,获得了很多感悟,当然也遇到了很多困难。但我们都一一克服了他们,成功的完成了实验。并在解决问题,克服困难的过程中,发现了自己平时忽略的,隐藏的问题,以及一些不该出现的粗心大意的小毛病。通过这些,我们认识的更加深刻,了解的更加深入。做到了学以致用,对知识掌握得更加牢固。通过了这一学期对微机原理的学习,真的对它有了一个全新的认识,我会坚持对它的学习,使自己在汇编语言上有一个长足的提高!

第三篇: 微机原理与接口技术实验总结

11107108

徐寒黎

一、 实验内容以及设计思路

1、①试编写一程序,比较两个字符串STRING

1、 STRING2 所含字符是否相同,若相同输出“MATCH”,若不相同输出 “NO MATCH”。 设计思路:定义一个数据段,在数据段中定义两个字符串作为STRING

1、 STRING2以及几个用于输入提示的和输出所需内容的字符串,定义一个堆栈段用于存放,定义代码段。关键步骤以及少量语句:第一步将STRING1和STRING2都实现用键盘输入,方法是

MOV DX,OFFSET STRING2 MOV AH,0AH INT 21H 并且显示在显示器上,显示方法将0AH改成09H,语句与上面类似。 然后进行比较第一个单元, MOV AL,[STRING1+1] CMP AL,[STRING2+1] JNZ NOMATCH 若字符串长度不等,则直接跳转,输出输出 “NO MATCH”; 若长度相等再逐个比较 LEA SI,[STRING1+2] LEA DI,[STRING2+2] MOV CL,[STRING1+1] MOV CH,0 CLD REPE CMPSB JCXZ MATCH,意思是全部相同就跳转MATCH,输出“MATCH”;不然进入下面的NOMATCH。退出。

②试编写求级数1^3+2^3 +3^3 …..前几项和刚大于10000的程序。

设计思路:原先编写的程序,设定和为10000,结果是14。但要求高一点的话,可以自己设置,实现用键盘输入和的值。

一个难点是将输入的ASCII码字符串,转换成与之相同的十进制数的数值。 关键的思路部分是:从1开始求级数,将和的值存在AX里,要加下一项级数前,比如这时已经加到4,PUSH一下AX,然后将5乘三遍,将乘积MOV到BX里,再POP AX,然后将BX的值加到AX里,然后将AX与N比较,如果比N小就继续上述步骤,知道刚比N大就输出数字。

③试编写一程序,完成字符串中各字符出现频度的统计,统计结果在屏幕上输出。

设计思路:因为这个程序需要统计所有的字符,所以首先要定义一个存储区,用来存放26个字符以及每个字符出现的个数。用键盘控制输入字符串以后,将字符串的第一个字符与这二十六个字符逐个比较,若有相同,在存放相应次数的存储单元的值上加1。然后比较第二个字符,依次类推,将字符串里的字符全部比较完。将个数大于1的字符以及字符的个数都输出到屏幕上。退出语句。 缺点和不足:这样需要定义一个非常繁的存储区。可以根据输入的字符,然后进行比较和统计。

④设计一个动画程序。

设计思路:这个程序参考了网上的资料,没有什么新意,是小鸟的图形,可以用上下左右键进行移动,可以退出。

步骤:首先设置堆栈段,数据段,代码段,设置显示方式等一些属性,设置背景色,设置小鸟的初始位置以及写出小鸟图形的像素的点。功能性的语句是,用键盘接受一个输入,将其与1bh比较,用JZ语句跳转到退出。若不是便与48h比较,看是否为向上,是则跳转到相应语句,不是则继续与50h比较;,看是否向下,是则跳转到关于向下移动的相关语句,否则再与4bh比较,看是否向左,依次类推,根据键盘输入的上下左右跳转到不同的语句。再将小鸟的位置进行与上下左右键的输入相应的移动。

最后编写好退出语句。

2、硬件接口主要是了解8255与8253的功能,以及控制字。 ①I/O地址译码

只要对硬件概念清晰,很简单的。基本上没有什么创造性。 收获:熟悉实验箱结构,了解每部分元件和标注的意义。 掌握I/O地址译码电路的工作原理。 ②可编程定时器8253 1,对照实验电路图,将计数器0设置为方式0,即数初值设为N(N<0fh),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并用逻辑笔观察OUT0点平变化。

2,将计数器0、计数器1分别设置为方式3,计数初值设为1000用逻辑笔观察out1输出电平的变化。

收获:掌握8253的基本工作原理和编程方法

③并行接口8255 1,试验电路如图所示,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。 3,数码管静态显示:按下图接好电路,将8255A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接5V(选中),S0和dp接地(关闭)。编程从键盘输入一位十进制数(0-9),在七段数码管上显示。

4,数码管动态显示:按下图接好电路,七段数码管的连接不变,位码驱动输入端S

1、S0接8255 C口的PC1和PC0。编程在两个数码管上显示“56”。

动态显示时,先送“5”的段码送A口,再送02h到C口为位码;经一定延时后,送“6”的段码送A口,再送01h到C口为位码。循环完成,可以显示数码。 5,数码管动态显示(选做):同图接好电路,编程在两个数码管上显示循环显示“00-99”。 只要搞清楚各个口的地址,以及选择适当的控制字,其实很简单的。

收获:掌握8255的基本工作原理和编程方法,对方式0的认识加深了。

二、 试验中遇到的问题 1在编写程序时,我深深体会到,画程序框图的重要性,每一步跳转的条件一定要搞清楚,Y和N不能搞反了,否则就错了。

2实验2,里面涉及的寄存器很多,很容易就会用乱了,还是很需要注意的。 3比如那个小鸟动画的题目,当时在控制左右移动的时候,选择的起始位置的语句没写对位置,每次按一个移位的键以后,都从最初的初始位置向某个方向移动。

4硬件方面的,一开始没搞懂地址什么意思,所以连线时很懵懂,后来清楚了,发现就没什么了。

三、心得感受

微机原理与接口技术的课程实验历时大半个学期,通过自己编写、运行程序,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。

前四个简单程序设计,加深了我们对初学的汇编语言指令的熟悉和理解,汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。不仅巩固了书本所学的知识,还具有一定的灵活性,发挥了我们的创造才能。

后面几个实验是并行输入输出接口8255和计数器8253的功能的操作,加深了我们对硬件的熟悉,锻炼了动手能力,发挥创造才能。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在自己的思考以及和同学的讨论中,终于迎刃而解。

第四篇:【微机实验】2018东南大学微型计算机原理及应用实验二

实验二 基本算术和逻辑运算

学院:信息科学与工程学院

姓名:周信元

学号:04016523 实验日期:2018.4.4

一、实验目的

1.熟悉算术和逻辑运算指令的功能。

2.进一步了解标志寄存器各标志位的意义和指令执行对它的影响。

二、实验任务

1.采用单步执行方式执行下列各程序段,检查各标志位的情况。

程序段1 MOV AX, 10101H MOV SI, 2000H ADD AL, 30H ADD AX, SI

;AX=1010H

;SI=2000H

;AX=1040H

;AX=3040H ;BX=03FFH MOV BX, 03FFH ADD AX, BX

;AX=343FH ;DS:[0020]=1000H ;DS:[0020]=443FH MOV[0020],1000H ADD 0020, AX 程序段2: MOV AX, OA0AOIH ADO AX, OFFFFH

;AX=A0A0H ;AX=A09FH MOV CX, OFFOOH ADD AX, CX SUB AX, AX INC AX

;CX=FF00H ;AX=9F9FH

;AX=0000H

;AX=0001H

;CX=FFFFH OR CX, OOFFH AND CX, OFOFH M0V[0010],CX 程序段3: MOV BL, 25H MO[0010],04H MOV AL, [0010] MUL BL 程序段4: MOV BL, 04H

;CX=0F0FH ;DS:[0010]=OFOFH

;BX=0025H ;DS:[0010]=04H

;AX=0004H

;AX=0094H

;BX=0004H MOV WORD PTR L0010], 0080H ;DS:[0010]=0080H MOV AX, [0010] DIV BL 程序段5: MOV AX, 00 DEC AX

;AX=0000H ;AX=FFFFH

;AX=3FFEH

;AX=0080H ;AX=0020H ADC AX, 3FFFH ADD AX, AX

;AX=7FFCH NOT AX SUB AX, 3

;AX=8003H ;AX=8000H

;AX=FBFDH OR AX, OFEFDH AND AX, OAFCFH SHL AX, 1 RCL AX, 1 步骤

;AX=ABCDH ;AX=579AH ;AX=AF35H (1)进入 Turbo Debugger,在CPU窗口下输入程序段 2)将IP指针指向程序段开始处 (3)按下F7键(单步)运行程序。

(4)分析各条指令执行后的结果与各标志位在指令执行后对它的影响

2.将寄存器BⅨ作地址指针,自BX所指的内存单元(0010HD)开始连续存放着三个无符号数(10H、04H、30H),。试编写程序分别求它们的和与积,并将结果存放在这三个数之后的单元中。

求和程序段

MOV[0010],10H MOV[0011],04H MOV[0012],30H SUB AX, AX MOV BX, 0010H MOV AL, BXI ADD AL, [BX+1] ADD Al, [BX+2] MOV [BX+3], AL 结果[DS:0013]=44H 求积程序段

MOV[0010],10H MOV[0011],04H MOV[0012],30H SUB AX, AX MOV A1,[0010] MOV BL, [0011 MUL BL MOV BL, [0012] MUL BL MOV [0013], AX 结果[DS:0013=0C00H 3.写出完成下述功能的程序段 (1)传送15H到AL寄存器。 (2)将L的内容乘以2 (3)传送15H到L寄存器 4)AL的内容乘以BL的内容。 最后结果(AX)=?

MOV AL, 15H SHL AL, 1 MOV BL, 15H MUL BL 结果(AX)=0372H 4.写出完成下述功能的程序段

(1)从地址DS:0000H单元中,传送一个数据58H到AL寄存器。 (2)把AL寄存器的内容右移两位

(3)再把L寄存器的内容与字节单元DS:0001H中的数据12H相乘。 (4)将乘积存入字单元DS:0002H中

M0V[0000],58H MOV[0001],12H MOV AL, [0000] SHR AL, 02 MOV BL, [0001] MUL BL MOV [0002], AX 结果[0002]=018CH 5.假设下面的程序段用来清除数据段中相应字存储单元的内容(即零送到这些存储 单元中去),其偏移地址从0010H到0020H (1)将第4条比较指令语句填写完整(划线处) MOV SI, 0010H NEXT: MOV WORD PTR[SI]. 00 ADD SI, 0022H CMP SI, INE NEXT (2)假设要清除偏移地址从0020H到001字存储单元中的内容(即由高地址到 低地址清零),试编写程序段。

MOV SI, 0020H NEXT MOV WORD PTR[S1], 00 SUB SI, 2 CMP SI, 000EH JNE NEXT

三,实验设备

IBM-TC/XT微机一台

四、实验预习要求

1.复习8086指令系统的算术和逻辑运算指令 2,按照题目要求在实验前编写好程序

五、实验报告要求

1.整理出运行正确的各题源程序段和结果, 2.,简要说明ADD指今和AND指令对标志位的影响。

1. 见报告中加粗文字部分

2. 普通加法指令ADD, 指令格式:ADD Reg/mem,Reg/mem/imm受影响标志位:AF/CF/OF/PF/SF/ZF 逻辑与操作指令AND,指令的格式: AND Reg/Mem, Reg/Mem/imm受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)

第五篇:云南大学软件学院计算机网络原理实验四

实验

四、web服务器套接字编程实验指导

1.实验目的:

编写一个WEB服务器程序,可以接受来自浏览器的访问,并传输页面(包含多个对象)到浏览器。掌握Socket编程。 2.实验环境:

连入局域网络的主机一台。 3.实验指导:

超文本传输协议(HTTP)是位于TCP/IP 协议的应用层,是最广为人知的协议,也是互连网中最核心的协议之一。HTTP协议是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。

一个完整的HTTP协议会话过程包括四个步骤:

 连接

Web浏览器与Web服务器建立连接,打开一个称为Socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功;  请求

Web浏览器通过Socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递);  应答

Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面;  关闭连接

应答结束后Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。

4.实验分析,回答下列问题。

运行课本中Webserver.java程序。查找资料,写出程序源代码,并加上必要的注释。如能改写该程序,附上修改后的源代码。附上运行的截图。

代码及注释如下:

import java.io.*;//引入Java输入输出包 import java.net.*; //引入Java网络包 import java.util.*;//导入Java实用工具库 class Webserver{ public static void main(String arg[]) throws Exception{ String requestMessageLine; String filename; //创建一个监听socket ServerSocket listenSocket=new ServerSocket(6789); //等待客户机发起连接 while(1==1) {

Socket connectionSocket=listenSocket.accept(); //创建一个从socket中读文本行的流 BufferedReader inFromClient=new

BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); //创建一个向socket中写文本行的流 DataOutputStream outToClient=new

DataOutputStream(connectionSocket.getOutputStream()); //读取客户机发送的一行文本requestMessageLine=inFromClient.readLine(); //字段串解析

StringTokenizer tokenizerLine=new StringTokenizer(requestMessageLine); //如果客户端的请求方式为get方式

if(tokenizerLine.nextToken().equals("GET")){ filename=tokenizerLine.nextToken(); //获得文件名

if(filename.startsWith("/")==true)

filename=filename.substring(1); //新建文件

System.out.println("The request filename is:" + filename); //输出字符串,内容为客户端请求的文件名

File file=new File(filename); int numOfBytes=(int)file.length(); //新建文件输入流

FileInputStream inFile=new FileInputStream(filename); byte[] fileInBytes=new byte[numOfBytes]; //将文件流信息读入byte数组 inFile.read(fileInBytes); // 服务端输出信息

outToClient.writeBytes("HTTP/1.0 200 Document Follows "); //不同的文件类型所对应的头文件格式不同

if(filename.endsWith(".jpg"))

outToClient.writeBytes("Content-Type:image/jpeg ");

if(filename.endsWith(".gif"))

outToClient.writeBytes("Content-Type:image/gif "); outToClient.writeBytes("Content-Length:"+numOfBytes+" ");

outToClient.writeBytes(" ");

outToClient.write(fileInBytes,0,numOfBytes);

connectionSocket.close();

} //错误的请求方式

else System.out.println("Bad Resquest Message"); } } 实验结果截图如下:

实验四为JAVA的编程实验,实验代码已经提供,大家只需要读懂此程序,运行此程序查看结果,或做稍加修改就可以了。客户端的程序不用编写,只需要用浏览器做为客户端程序,向给定的服务器程序索取网页就可以了,大家可以事先先下载一个网页把它存放在和服务器程序同一个文件夹下即可,浏览器地址栏输入按照实验提示来做:使用WEB浏览器来测试WEB服务器的程序,如果在本机上测试,本机服务器监听端口为6789,要获得本机上文件名为index.html,应在浏览器指定下列URL http://localhost:6789/index.html;如果服务器程序不在本机上,服务器监听端口为6789,要获得服务器上文件名为index.html,应在浏览器指定下列URL http://服务器IP地址:6789/index.html。检查浏览器中输入的端口号是否和服务器监听的端口号一致。不一致要进行修改。

四、实验总结

总结你在实验过程中遇到的问题和解决的方法。

这次实验做的比较慢,在webserver程序的运行上遇到了比较大的困难,由于第一次接触java,对于java的运行并不清楚,一开始就不知道用什么编译器编译,在网上查找后,找到了合适的编译器,之后又出现了编译错误的情况,如下图:

由于无法加载,服务器程序一直运行不成功,后来通过网络查找才发现,java程序运行前必须进行编译,生成一个class后缀的文件才行,最终运行成功,通过浏览器找到预先的存储的网页。

这次实验比较好的是在jdk的安装和设置环境变量的时候比较熟练,得益于第一次综合技能时间做的比较好,所以这次在配置java环境是比较顺利。

上一篇:乌兰察布市发改委领导下一篇:物流管理毕业设计选题

本站热搜