试题查看

【多选题】

1.smtp是发送E-mAil的协议,常用以下5条命令发送E-mAil:
hElo,与smtp服务器握手,传送本机域名;
mAilFrom:,传送发信者的信箱名称;
rCptto:,传送接收者的信箱名称;
DAtA,发送邮件数据(包括信头和信体);
quit,退出与smtp服务器的连接。
2.试题中直接利用的类及方法如下:
(1)类sErvErsoCkEt(int port)实现tCp服务器接口(soCkEt),它提供两种构造函数,用它们来指定服务器插口所用的端口,并监听到达的连接请求。类中的主要方法有:
ACCEpt( ):启动服务器插口监听并等待,直到建立连接为止,一旦建立连接就返回soCkEt类的一个对象。
gEtinEtADDrEss( ):返回插口所连接的主机地址。
gEtloCAiport( ):返回在服务器插口上建立了连接的端口。
ClosE( ):关闭服务器插口。
(2)类inEtADDrEss包装了intErnEt地址。类中的主要方法有:
gEtloCAihost( ):返回一个代表本机intErnEt地址的inEtADDrEss对象。
gEtADDrEss( ):获得数字表示的ip地址。
gEthostnAmE( ):获得域名。
(3)类soCkEt实现基于连接的客户插口。类中的主要方法有gEtinEtADDrEss( ):返回一个与插口连接的客户机的intErnEt地址,其类型为inEtAD-DrEss。gEtlnputstrEAm( ):用来访问与插口相关的输入流。gEtoutputstrEAm( ):用来访问与插口机关的输出琉。ClosE( ):关闭插口。
(4)rEADlinE( )是输入流类的一个方法,用于服务器或客户从对方读入一行输入流信息。
(5)用户白定义类nvtinputstrEAm(inputstrEAm instrEAm, outputstrEAm outstrEAm)实现了网络虚拟终端输入接口。
(6)用户自定义类nvtoutputstrEAm(outputstrEAm outstrEAm)实现了网络虚拟终端输接口。
3.下面是用jAvA语言实现的一个简单smtp服务器程序的部分代码。
[程序代码]
import jAvA、nEt. *:
import jAvA、io. *;
import jDg. yAn. nvtlnputstrEAm;//用户自定义类包
import jDg. yAn. nvtoutputstrEAm;//用户自定义类包
puBliC ClAss smtpsErvErApp
puBliC stAtiC voiD mAin(string Args[])
smtpsErvEr sErvEr=nEw smtpsErvEr( );
sErvEr. run( );
ClAss smtpsErvEr
stAtiC FinAl int hElo=1;
stAtiC FinAl int mAil=2;
stAtiC FinAl int rCpt=3;
stAtiC FinAl intDAtA=4;
stAtiC FinAl intEnD_DAtA=5;
stAtiC FinAl int ouit=6;
stAtiC FinAl int FinishED=9;
nvtoutputstrEAm out;
nvtinputstrEAm in;
string hostnAmE;
puBliC smtpsErvEr( )
supEr( );
puBliC voiD run( )
try
sErvErsoCkEt sErvEr= (1) ;//在1145号端口建立下Cp服务器插口
int loCAlport=sErvEr. gEtloCAlport( );//监听连接端口
hostnAmA= (2) ;//获取本地主机域名
svstEm. out. prFntln("listEning on port"+loCAiport+".");
BoolEAn FinishED=FAlsE;
Do
soCkEt CliEnt= (3) ;//监听等待,直到建立连接,返回对象CliEnt
stnng DEstnAmE= (4) ;//获得所连接的客户主机ip地址的域名
int DEstport=CliEnt. gEtport( );//所连接的客户主机端口号
systEm. out pnntln("ACCEptED ConnECtion to"+DEstnAmA+"on port"+DEstport+"."
//控制台显示连接
out=nEw nvt0utputstrEAm(CliEnt. gEt outputstrEAm( ));
in=nEw nvtinputstrEAm( (5) );//建立与连接关联的输入流
(6) ;//接收邮件
(7) ;//关闭连接对象
whilE(! FinishED);
CAtCh(unknownhostExCEption Ex)
svstEm.out.printtn("unknownhostExCEption oCCurrED、");//出错处理
CAth(loExCEption Ex)
systEm. out. println("loExCEption oCCurrED、");
volD gEtmAil( )//实现smtp的子集,从客户接收邮件
out. println("sErvEr220"+hostnAmE+"rEADy!");
int stAtE=hElo;//设置状态为hElo,stAtE保存与客户通信的状态
Do//接收并处理从邮件客户接收到的命令
string linE="";
out. println("sErvEr 250 hElo, ok!");
try
linE= (8) ;//从虚拟终端读取一行
iF(linE==null)stAtE=FinishED;
CAtCh(ioExCEption Ex)
systEm. out. prmntln("sErvEr ioExCEptlon oCCurrED、");
systEm.Exit(1);
switCh(stAtE)
CAsE hElo:
iF( (9) )//若该行信息为传送本机域名
out. println("sErvEr 250 hEllo");
systEm. out. println(linE);
stAtE=mAil;
ElsE
out. println("sErvEr 500Error");
systEm. out. println("sErvEr"+linE);
stAtE=FinishED;
BrEAk’
CAsE mAil://省略代码
CAsE rCpt://省略代码
CAsEDAtA、
iF( (10) )//若该行信息为发送邮件数据
out. println("354 mAil input; EnD with.");
systEm. out. println(linE);
stAtE=EnD_DAtA;
ElsE
out. println("500Error");
systEm. out. println(linE);

查看答案解析

参考答案:

正在加载...

答案解析

正在加载...

根据网考网移动考试中心的统计,该试题:

0%的考友选择了A选项

0%的考友选择了B选项

0%的考友选择了C选项

0%的考友选择了D选项

你可能感兴趣的试题

1.SMTP是发送E-mail的协议,常用以下5条命令发送E-mail:HELO1.SMTP是发送E-mail的协议,常用以下5条命令发送E-mail:HELO1.SMTP是发送E-mail的协议,常用以下5条命令发送E-mail:HELO1.SMTP是发送E-mail的协议,常用以下5条命令发送E-mail:HELO1.SMTP是发送E-mail的协议,常用以下5条命令发送E-mail:HELO1.SMTP是发送E-mail的协议,常用以下5条命令发送E-mail:HELO