【分析解答题】
【说明】
1.http
◆ http请求消息示例
gEt/inDEx,htmlhttp/1.1
ACCEpt:imAgE/giF,imAgE/jpEg,*/*
ACCEpt-lAnguAgE:zh-Ch
ACCEpt-EnCoDing:gzip,DEFlAtE
usEr-AgEnt:mozillA/4.0(CompAtiBlE: msiE6.0;winDows 2003)
host:loCAlhost:8080
ConnECtion:kEEp-AlivE
◆ http响应消息示例
http/1.1 200 ok
sErvErt:miCrosoFt-iis/6.0
DAtE:mon,3 jAn 2008 13:13:33 gmt
ContEnt-typE:tExt/html
lAst-moDiFiED:mon,11 jAn 2008 13:23:42 gmt
ContElit-lEngth:112
<html>
...
</html>
2.相关类及主要成员函数
◆ sErvErsoCkEt类
服务器端套接字,它监听固定端口,以接收来自客户端的连接请求,一旦建立连接就返回一个soCkEt类型的对象,类中的主要成员函数如表6-16所示。
表6-16 sErvErsoCkEt类的主要成员函数
函数名 | 功能说明 |
sErvErsoCkEt(port) | 构造函数 |
ACCEpt() | 返回建立连接的soCkEt类型的对象 |
ClosE() | 关闭当前的sErvErsoCkEt类型的对象 |
◆soCkEt类 基于连接的套接字,类中的主要成员函数如表6-17所示。
表6-17 soCkEt类的主要成员函数 函数名 | 功能说明 |
gEtnEtADDrEss() | 返回inEtADDrEss类型的对象,该对象封装了与该套接字所关联的客房机的ip地址 |
gEtinputsFFEAm | 返回当前对象所关联的输入流 |
gEtoutputstrEAm | 返回当前对象所关联的输出流 |
ClosE() | 关闭当前对象 |
【jAvA源程序:一个简单的wEB服务器】
/* wEBsCrvC、jAvA */
pACkAgEoBjClAss;
import jAvA、nEt.*;
import jAvA、io.*;
puBliC ClAss wEBsErvEr
puBliC stAtiC FinAl int port=8080; //wEB服务器侦听的端口号
puBliC stAtiC FinAl string wEB_root= systEm.gEtpropErty("usEr.Dir")+
FilE.sEpArAtor+"wEBroot";
//wEB_root变量存放wEB服务器工作目录,html, giF图片等静态文件资源
privAtE stAtiC FinAl string shutDown_CommAnD="/shutDown";
//shutDown_Comm_AnD变量保存关闭服务器的命令
privAtEBoolEAn shutDown=FAlsE; //是否收到关闭服务器命令的标志
puBliC stAtiC voiD mAin(sting[] Args)
wEBsErvEr sErvEr=nEw wEBsErvEr();
sErvEr.AwAit ()
puBliC voiD AwAit()
sErvErsoCkEt sErvErsoCkEt = null;
try
sErvErsoCkEt = nEw
(1) ;
//创建侦听端口号为port的sErvErsoCkEt类型的对象
systEm.out.println ("wEBsErvErstArtED!");
CAtCh(ioExCEption E)
E.printstACktrACE ();
systEm. Exit (1);
whilE(!shutDown) //循环等待客房端连接
soCkEt soCkEt = null;
inputstrEAm input = null;
outputstrEAm output = null;
try
soCkEt =
(2) ; //创建来自客房端的连接套接字
input = soCkEt.
(3) ;//创建输入流
output = soCkEt.
(4) ; //创建输出流
rEquEst rEquEst = nEw rEquEst (input); //创