图7 输入域名 图9 DNS新建主机 11 设定用于分配的地址范围
图8 创建区域文件
图10 DHCP
图12 设置不参与分配的地址范围
16
图
图13 添加路由器信息 图14添加DNS服务器信息 5) DHCP服务的使用
配置客户计算机“TCP/IP协议”属性,在“IP地址”选项卡中选择“自动获取IP地址”,在“WINS”选项卡中,选择“使用DHCP进行WINS解析”。此时,客户端即可使用DHCP服务自动获取IP地址。在客户机的 “命令提示符”下,输入ipconfig/all命令即可查看通过DHCP服务器获取的IP地址、默认路由器、DNS服务器等信息。 四、实验报告内容:
1、 总结实验过程中遇到的问题及解决方法;
2、 列出所建Web服务器的名称、IP地址及其主目录的目录结构。 3、 列出所建DNS区域名称,以及在该区域内增加的记录。
4、 列出客户机通过DHCP获取的IP地址、默认网关、DNS服务器等信息。
17
实验三 Web服务器的实现
一、 实验目的及任务
1、实验目的
熟悉简单网络的搭建与基本配置; 熟悉socket、多线程编程; 熟悉JDK编程工具的基本使用; 熟悉HTTP协议;
熟悉Web服务器的基本工作原理和配置。 2、实验任务
(1)以JDK为开发工具,利用Socket通信机制实现一个多线程的WEB服
务器,该服务器具有以下功能: ? 能够并行服务于多个请求。
? 对于每个请求,显示接收到的HTTP请求报文的内容,并产生适当
的响应(若找到用户请求对象,则返回该对象。否则发送一个包含适当提示信息的响应消息,从而可以在浏览器窗口中显示差错信息。)
(2)搭建一个简单的网络环境,调试 web服务器程序。
二、 实验性质
综合性实验。
三、 实验环境
操作系统:Windows2000 server 开发工具:JDK或其他开发工具
实验设备:交换机(一台)、计算机(两台)、网线若干
四、 实验相关知识点(本课程综合或多课程综合)
1、 网络基本原理(如:HTTP协议、Web服务器、Socket、TCP、UDP等) 2、 网络服务器基本配置(简单C/S网络的组建、web服务器的基本配置等) 3、 程序设计(socket编程、多线程程序设计等)
18
五、 实验实施步骤
1、开发程序
2、搭建简单的C/S网络 3、配置并测试web服务器程序
六、 实验报告内容
1、写出实现“一、实验要求”中所述功能的Web服务器程序的结构框图。 2、写出实现“一、实验要求”中所述功能的Web服务器程序的代码。 3、总结程序设计、调试中出现的问题及其解决办法。 4、实验心得。
附件一:Java的多线程编程 一、理解多线程
多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。
线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。
多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个单核CPU,那么真正的“同时”是不可能的。但是由于CPU的处理速度非常快,用户感觉好像自己的程序连续运行一样。因此我们也不用关心它,只需要设想各个线程是同时执行即可。
多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题,将在以后探讨。 二、在Java中实现多线程
为了创建一个新的线程,我们需要做些什么?很显然,我们必须指明这个线程所要执行的代码,而这就是在Java中实现多线程我们所需要做的一切。作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程。
Thread 类最重要的方法是 run() ,它为Thread 类的方法 start() 所调用,提供我们的线程所要执行的代码。为了指定我们自己的代码,只需要覆盖它。 1、方法一:继承 Thread 类,覆盖方法 run()
我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即
19
可。
下面是一个例子:
public class MyThread extends Thread {
int count= 1, number; public MyThread(int num) {
number = num;
System.out.println(\创建线程 \}
public void run() {
while(true) {
System.out.println(\线程 \计数 \if(++count== 6) return; }
}
public static void main(String args[]) {
for(int i = 0; i < 5; i++) new MyThread(i+1).start(); } }
这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread 类(Java不允许多重继承,即一个类的父类只能有一个),这时如果又不想建立一个新的类,应该怎么办呢?
不妨来探索一种新的方法:不创建 Thread 类的子类,而是直接使用它,那么我们只能将我们的方法作为参数传递给 Thread 类的实例。这有点类似回调函数。但是 Java 没有指针,我们只能传递一个包含这个方法的类的实例。那么如何限制这个类必须包含这一方法呢?使用接口。Java 提供了接口 java.lang.Runnable 来支持这种方法。 2、方法二:实现 Runnable 接口
Runnable 接口只有一个方法 run(),我们声明自己的类实现 Runnable 接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。
但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(Runnable target);来实现。
下面是一个例子:
public class MyThread implements Runnable {
20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库《计算机网络》实验指导书(2011) - 图文(4)在线全文阅读。
相关推荐: