早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->软考中级 -->

● 试题三 阅读以下说明和Java程序代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 1.S

题目

● 试题三

阅读以下说明和Java程序代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

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

·HELO<SP><domain><CRLF>,与SMTP服务器握手,传送本机域名;

·MAIL<SP>FROM:<reverse-path><CRLF>,传送发信者的信箱名称;

·RCPT<SP>TO:<forward-path><CRLF>,传送接收者的信箱名称;

·DATA<CRLF>,发送邮件数据(包括信头和信体);

·QUIT<CRLF>,退出与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。getInputStream( ):用来访问与插口相关的输入流。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.NVTInputStream;//用户自定义类包

import jdg.yan.NVTOutputStream;//用户自定义类包

public class SMTPServer App

{

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 int DATA=4;

static final int END _DATA=5;

static final int QUIT=6;

static final int FINISHED=9;

NVTOutputStream out;

NVTInputStream in;

String hostName;

public SMTPServer( )

{

super( );

}

public void run( ){

try {

ServerSocket server= (1) ;//在1145号端口建立TCP服务器插口

int localPort=server.getLocalPort();//监听连接端口

hostNama= (2) ;//获取本地主机域名

System.out.println("listening on port"+localPort+".");

boolean finished=false;

do {

Socket client= (3) ;//监听等待,直到建立连接,返回对象client

String destName= (4) ;//获得所连接的客户主机IP地址的域名

int destPort=client.getPort (); //所连接的客户主机端口号

System.out println("Accepted connection to"+destNama+"on port"+destPort+".");

//控制台显示连接

out=new NVTOutputStream(client.getOutputStream());

in=new NVTInputStream( (5) ); //建立与连接关联的输入流

(6) ;//接收邮件

(7) ;//关闭连接对象

}while(!finished) ;

}catch (UnknownHostException ex) {

System.out.println("UnknownHostException occurred.");//出错处理

}cath(IOException ex) {

System.out.println ("IOException occurred.");

}

}

void 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.println("Server IOException 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 500 ERROR");

System.out.println("Server"+line);

}

state=FINISHED;

break;

case MAIL://省略代码

case RCPT://省略代码

case DATA:

if( (10) )//若该行信息为发送邮件数据

{

out.println("354 mail input;end withCRLF.CRLF");

System.out.println(line);

state=END_DATA;

}else{

out.println("500 ERROR");

System.out.println(line);

}

break;

case END_DATA;//代码省略

case QUIT://代码省略

}

}while(state!=FINISHED);

}

//判断客户收到的命令是否与指定的命令字符串相匹配

boolean commandIs(String s,String line){

int n=s.length( );

if(s.equalsIgnoreCase(line.substring(0,n)))return true;

return false;

}

}

参考答案
正确答案:

试题三

(1)【答案】new ServerSocket (1145)

【解析】建立TCP服务器插口,并指定是在1145号端口。

(2)【答案】InetAddress.getLocalHost ().getHostName ()

【解析】获取本地主机域名。

(3)【答案】server.accept ()

【解析】监听等待建立连接,返回对象client

(4)【答案】client.getInetAddress ().getHostName ()

【解析】获得所连接的客户主机IP地址的域名。

(5)【答案】client.getInputStream (),out

【解析】建立与连接关联的输入流。

(6)【答案】getMail ()

【解析】接收邮件。

(7)【答案】client.close ()

【解析】关闭连接对象。

(8)【答案】in.readLine ()

【解析】从虚拟终端读取一行。

(9)【答案】commandIs ("HELO",line)

【解析】若该行信息为传送本机域名。

(10)【答案】commandIs ("DATA",line)

【解析】若该行信息为发送邮件数据。

 

 

看了● 试题三 阅读以下说明和Ja...的网友还看了以下:

我的题目在补充说明里不同的汉字代表不同的个位数、相同的汉字代表相同的数、你能知道下面每个字各代表什 数学 2020-04-07 …

现代字“爱”,古语可以怎么说?现代字“爱”,用古语可以怎么说?要求古语是一个字的,能多就尽量多给一 语文 2020-05-13 …

式中不同的汉字代表1-9中不同的数字,当算式成立时,《中国》这两个汉字所代表的两位数最大是多少?中 数学 2020-05-13 …

初一数学高手帮我做这道选择题,要写出过程和理由下列说法:①代数式中的字母可以取任意值.②一个代数式 数学 2020-05-16 …

数字几乘以9等于反过来的这个数字?家里小朋友的作业,我也不会做,就来求救大家的力量下面算式中不同的 数学 2020-06-30 …

晨字由日和辰两部分组成,其中日字代表字的意思,说明这个字与时间有关系,辰代表这个字的读音,你 语文 2020-07-08 …

1.红能用那些字代替(写五个)2.黑能用那些字代替(写五个)3.碧可指几种颜色?举例说明4.青可指几 语文 2020-11-11 …

请问有木有人看过《少年特种兵的》?里面有哪些代号(分男女),没看过的也没事,说说些代号,最后的字是动 其他 2020-11-22 …

简明古代汉语填空1、东汉许慎在《说文解字》中给“六书”列出的细目是---------、------- 语文 2020-11-23 …

日本的字是不是模仿中国古代的字?日本古代是没有自己的文字的,所以它从别的国家学习了文字,主要是从中国 其他 2020-12-18 …