一起答
主观

请阅读以下说明和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表示本次读操作没有成功,

试题出自试卷《软件水平考试(中级)网络工程师下午(应用技术)试题模拟试卷22》
参考答案
查看试卷详情
相关试题
  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表示本次读操作没有成功,

  2. 在第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

  3. 在调用超级终端程序进行设备连接时,应该对设备的连接参数进行正确设置,参数主要包括串口数据传输率、数据位数。停止位数以及是否有奇偶校验。请给出正确的连接参数,以便进入Cisco设备的虚拟操作台,进行设备调试。(控制在100个字以内)

  4. 阅读以下有关网络设备安装与调试的叙述,分析设备配置文件,回答问题1、问题2和问题3。

     现以一台远程访问服务器(Remote Access Server,RAS)Cisco 2509、RJ45为例来说明。

     第1步,准备安装与调试所需的设备,主要包括RAS——Cisco 2509、RJ45直通线,RJ45转9针串口转换器、计算机。

     第2步,硬件连接,RJ45直通线一头插入Cisco 2509的Console口,另一头接RJ45转9针串口转换器,再将转换器接到计算机的串口。

     第3步,RAS加电,在计算机上调用Windows 98下的超级终端程序,配置设备连接参数,以便进入Cisco设备的虚拟操作台。

     第4步,输入Gsco 2509的IOS配置命令。

     第5步,将调试完毕的设备连入本地网络,通过拨号验证配置是否正确。

    在RAS上存在着两个RJ45的端口,分别为Console与AUX,请问这两个端口的用途是什么?(控制在100个字以内)

  5. 如何设定邮件自动转发?如果向多个邮件地址进行邮件自动转发,如何配置?

  6. IMail安装完成后,系统自动建立了一个名为"root"的用户,在默认情况下“root”用户是个失效的账号,如何设置使其生效?

  7. 限制MailUser邮件主机里每个用户邮箱里所能存放的最多邮件数量不超过20个,如何配置?

  8. 如何暂时禁用某个用户账号?

  9. 限制MailUser邮件主机里所有用户接收的单个邮件的大小不超过5MB,如何配置?

  10. 限制MailUser邮件主机里最多允许有2000个邮件用户,如何配置?