软件水平考试(中级)网络工程师下午(应用技术)试题模拟试卷22

0
收藏   分享
  • 卷面总分:75分
  • 试卷类型:模拟考试
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:5次
  • 作答时间:150分钟
试卷简介
试卷预览
1

请阅读以下说明和Socket程序,将应填入(n)处的字句写在对应栏内。

  【说明】

 网络应用的基本模型是客户机/服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户机和服务器。

 一般发起通信请求的应用程序称为客户软件,该应用程序通过与服务器进程建立连接,发送请求,然后等待服务器返回所请求的内容。服务器软件一般是指等待接收并处理客户机请求的应用程序,通常由系统执行,等待客户机请求,并且在接收到请求之后,根据请求的内容,向客户机返回合适的内容。

 本题中的程序较为简单,客户机接收用户在键盘上输入的文字内容,服务器将客户机发送来的文字内容直接返回给客户机,在通信过程中服务器方和客户机方都遵守的通信协议如下:

 由客户机首先发送请求,该请求由首部和内容两大部分组成,两个部分各占一行文字,通过行结束符“\n”隔离。

 首部只有一个Length域,用于指定请求的内容部分的长度,首部的结构为:“关键词 Length”+“”+数值+“\n”。

 内容部分为一行文字,其长度必须与Length域的数值相符例如,客户机的请求为“Length14\nHello,my baby!”,服务器接收请求处理后返回文字"Hello,my baby!”。

 【Socket程序】

 服务器主程序部分:

  #indude<stdio.h>

  ……//引用头文件部分略>

  #define SERVER PORT 8080 //服务器监听端口号为8080

  #define BACKLOG 5 //连接请求队列长度

  int main(int argc,char * argv[]){

  int listenfd,connfd //监听套接宇、连接套接字描述符

  struct sockaddr_in servaddr; //服务器监听地址

  listenfd= (1) ; //创建用于监听的套接字

  if(listenfd<0){

  fprintf(stderr,“创建套接字错误!”)

  exit(1);

  } //套接字创建失败时打印错误信息

  bzero(&servaddr.sizeof(servadd));//将地址结构置空

  servaddr.sin_family=AF_INET;//设置地址结构遵循TCP/IP协议

  servaddr.sin_addrs_addr=htonl.( (2) );//设置监听的IP地址为任意合法地址,并将该地址转换为网络字节顺序

  servaddr.sin_port= (3) ;//设置监听的端口,并转化为网络字节顺序

  if(bind( (4) )<0){

  fprintf(stderr,“绑定套接字与地址!”);

  exit(1);

  } //将监听地址与用于监听的套接字绑定,绑定失败时打印错误信息

  if(listen(listedfd,BACKLOG)<0){

  fprintf(stderr,“转换套接字为监听套接字!”);

  exit(1);

  } //将用于监听的套接字由普通套接字转化为监听套接字

  for(;;){

  connfd= (5) ;

  //从监听套接字的连接队列中接收已经完成的连接,并创建新的连接套接字

  if(connfd<0){

  fprintf(stderr,“接收连接失败!”);

  exit(1);

  } //接收失败打印错误信息

  serv_respon(connfd);//运行服务器的处理函数

   (6) ; //关闭连接套接字}

  close(listenfd); //关闭监听套接字}

  服务器通信部分:

  #include<stdio.h>

  ……//引用头文件部分略>

  void serv_respon(int sockfd){

  int nbytes;char buf[1024];

  for(;;){

  nbytes=read_requ(sockfd,buf,1024);

  //读出客户机发出的请求,并分析其中的协议结构,获知请求的内容部分的长度,并将内容复制到缓冲区buf中,

  if(nbytes==0)return;//如客户机结束发送就退出

  else if (bytes<0){

  fprintf(siderr,“读错误情息:%s\n”,strerror(errno));

  return;

  }//读请求错误打印错误信息

  if(write_all(sockfd,buf,nbytes)<0)

  //将请求中的内容部分反向发送回客户机

  fprintf(siderr,“写错误信息:%s\n”,strerror(errno));

  }

  }

  int read_requ(int sockfd,char*buf int size){

  char inbuf[256];

  int n;int i;

  i=read_line(sockfd,inbuf,256);

  //从套接字接收缓冲区中读出一行数据,该数据为客户请求的首部

  if(1<O)return(i);

  else if(i==0)return(0);

  if(strncmp(inbuf," ",6)==0)

  sscanf( (7) ,“%d”,&n); //从缓冲区buf中读出长度信息

  else{

  sprintf(buf," ",14);

  return(14);

  } //取出首部Length域中的数值,该数值为内容部分的长度

  return(read_all(sockfd,buf,n));//从接收缓冲区中读出请求的内容部分

  }

  int get_char(int fd,char * ch){

  static int ffset=0;

  static int size=0;

  static char buff[1024];

  //声明静态变量,在get_char多次被调用期间,该变量的内存不释放

  for(;size<=0|| (8) ;){

  size=read(fd,buf,1024); //一次从套接字缓冲区中读出一个数据块

  if(size<0){

  if(errno==EINTR){

  size=0;

  contine;

  //EINTR表示本次读操作没有成功,

1

在第4步中,进入虚拟操作台后,在IOS环境下输入了如下的配置,请解释(1)~(4)处的标有下划线部分配置命令的含义(“◇”后为配置内容,“●”和“//”后为注释内容)

 ●配置服务器信息。

 ◇hostname Cisco 2509  //服务器名称

 ◇enable secret ******  //特权口令

 ◇ip domain-manl wxx.edu.cn //设置拨号服务器所属域名

 ◇ip-name-server202.112.77.2 //设置拨号服务器DNS(1)(此处有3条下划线)

 ◇async-bootp subnet-mask 255.255.255.0

 ◇async-bootp gateway202.112.77.254

 ◇async-bootp dns-server202.112.77.2

 ●配置Ethenlei Port(略)。

 ●配置动态分配的地址池。

 ◇ip local pool pool2509 202.112.79.1 202.112.79.8  //定义IP地址池

 ●配置Asynchronous Interface。

 //异步口是RAS服务器上连接modem,用于用户拨号的端口

 ◇ interface Group-Async 1 //对第一组异步接口进行配置,对异步口的配置可以按组,也可以按单个口

 group-range 1 8  //划定1到8号异步口属于第一组

 encapsulation pap //加载点到点协议

 (2)(此处有2条下划线)

 ansync dynamic address

 ansync default address pool pool2509 //pool2509的定义见“配置动态分配的地址池”部分

 PPP authentication pap   //设置PPP的验证方式为用户口令方式

 ●配置router信息。

 (3)(此处有3条下划线)

 ◇router rip

      network 202.112.77.0

      network 202.112.79.0

 ●配置拨号服务器的默认路由(略)。

  ……

 ●配置存取用户组。

 ◇access-list 1 pormit 202.112.77.0.0.0.255  //定义用户组的范围

 ●配置Asynchronous PORT(略)。

 ●配置vty。

   ◇Iine vty 0 4 //配置虚拟终端

     (4)(此处有3条下划线)

     access-class 1 in //access-class的定义见“配置存取用户组”

     pasword * * * * * *

     login