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

● 试题三

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

【说明】

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。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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值