⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.htm

📁 非常不错的网络工程师模拟题目 多做题
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                  exit(1);<br>
                }'//接收失败打印错误信息<br>
                serv_respon(connfd);//运行服务器的处理函数<br>
                close(connfd);//关闭连接套接字}<br>
                dose(listenfd);'//关闭监听套接字}<br>
                服务器通信部分:<br>
                #include&lt;stdio.h&gt;<br>
&lt; ……//引用头文件部分略&gt;<br>
                void serv_respon(int sockfd){<br>
                int nbytes;char bur[1024];<br>
                   for(;;){<br>
                     nbytes=read_requ(sockfd,bur,1024);<br>
                //读出客户机发出的请求,并分析其中的协议结构,获知请求的内容部分的长度,并将内容复制到缓冲区buf中,<br>
                   if( (6) )return;//如客户机结束发送就退出<br>
                   else if(bytes&lt;0){<br>
                     fprintf(siderr,&quot;读错误情息:%s\n&quot;,strerror(errno));<br>
                  return;<br>
} //读请求错误打印错误信息<br>
   if(write-all(sockfd,buf,nbytes)&lt;0)<br>
   //将请求中的内容部分反向发送回客户机<br>
   fprintf(siderr,&quot;写错误信息:%s\n&quot;,strerror(errno));<br>
   }<br>
}<br>
int read_requ(int sockfd,char*buf int size){<br>
char inbuf[256];<br>
int n;int i;<br>
i=read_line(sockfd,inbuf,256);<br>
//从套接字接收缓冲区中读出一行数据,该数据为客户请求的首部<br>
if(1&lt;O)return(i);<br>
   else if(i==0)return(0);<br>
  if(stmcmp(inbuf,″″,6)==0)<br>
scanf( (7) ,″%d″,&amp;n); //从缓冲区buf中读出长度信息<br>
else{<br>
   sprintf(bur,″″,14);<br>
return(14);<br>
} //取出首部Length域中的数值,该数值为内容部分的长度<br>
return(read-all(sockfd,bur,n));//从接收缓冲区中读出请求的内容部分<br>
}<br>
int get-char(int fd,char*ch){<br>
   static int offset=0;<br>
   static int size=0;<br>
   static char buff[1024];<br>
//声明静态变量,在get_char多次被调用期间,该变量的内存不释放<br>
for(;size&lt;=0 | |  (8) ;){<br>
   size=read(fd,bur,1024);//一次从套接字缓冲区中读出一个数据块<br>
     if(size&lt;0){<br>
     if(errno==EINTR){<br>
     size=0;<br>
     contine;<br>
//EINTR表示本次读操作没有成功,但可以继续使用该套接字读出数i<br>
}else<br>
     return(-1);<br>
}<br>
offset=0; //读出数据后,将偏址置为0<br>
*ch=buf[offset ++]; //将当前的字符取出,并将偏址移向下一字符<br>
   return(1);<br>
}<br>
int read _ line(int fd,char*buf,int msxlen){<br>
   int i, n;<br>
   char ch;<br>
   for(i=0;i&lt; (9) ){<br>
     n=get_char(fd,&amp;ch);//取出一个字符<br>
     if(n==1){<br>
   buff[i++]=ch;//将字符加入字符串中<br>
   if( (10)  )break;<br>
}else if(n&lt;)return(-1);<br>
else break;<br>
}<br>
   buf[i]=`\0`;<br>
   return(i);<br>
}<br>
//函数read_line的作用是读出请求的首部,其处理的方法是每次调用get_char函数,取出一个字符,检查该字符是否是回车符`\n`,如果是回车符,就返回请求的首部<br>
//get_char的处理方式较为特殊,并不是每次调用read函数读一个字符,而是一次从缓冲区中读一块内容,再一次一个字符提交给函数read_line,如果提交完了就再读一块,这样就可以提高读缓冲区的效率。另外,由于客户机是分两次调用writ_all函数将请求的首部和内容发送给服务器,因此get_char不会取出请求内容部分的字符部分<br>
SOCKET数据结构与函数:<br>
1.地址结构。<br>
   sockaddr_in:<br>
sockaddr_in类型的结构定义,sockaddr_in是通用套接字结构sockaddr在TCP/IP协议下的结构重定义,为TCP/IP套接字地址结构。<br>
   Struct sockaddr_in{<br>
   short int sin_family;//地址类型AF_XXX,其中AF_INET为TCP/IP专用<br>
   unsigned short int sin _port;//端口号<br>
   struct in_addr sin_addr;//Internet地址<br>
   //端口号以及Internet地址使用的是网络字节顺序,需要通过函数htons转换<br>
   }<br>
   struct_inaddr{<br>
   _u32 s_addr;//类型为unsignel long<br>
   }<br>
     hostent:<br>
     hostent类型的结构定义<br>
     struct hostnet{<br>
     char*h_name;  //主机的正式名称<br>
     char**h_aliases;  //别名列表<br>
     nit h_addrtvPe;  //主机地址类型:AF_XXX<br>
     int h_length;  //主机地址长度:4字节(32位)<br>
     char**h_addr_list;  //主机IP地址列表<br>
   }<br>
   #define h_addr h_addr_list[0]<br>
2.基本函数。<br>
   int socket(int domain,int type,int protocol);<br>
函数socket创建一个套接字描述符,如果失败则返回-1。domain为地址类型,type为套接字类型,本题中为SOCK_STREAM;protocol指定协议,本题中为0。<br>
   int connect(int sockfd,struct sockaddr*servaddr,int addrlen);<br>
函数connect与服务器建立一个连接,成功返回0,失败返回-1。servaddr为远程服务器的套接字地址,包括服务器的IP地址和端口号;addrlen为地址的长度。<br>
   int read(int fd,char*bur,int len);<br>
   int write(int fd,char*buf,int len);<br>
函数read和write从套接字读和写数据,成功返回数据量大小,否则返回-1。buf指定数据缓冲区,len指定接收或发送的数据量大小。<br>
   int bind(int sockfd,struct sockaddr*myaddr,int addrlen);<br>
函数bind将本地地址与套接字绑定在一起,成功返回0,否则返回-1;myaddr是本机地址;addrlen为套接字地址结构的长度。<br>
   int listen(int sockfd,int backlog);<br>
函数listen将一个套接字转换为倾听套接字,成功返回0,否则返回-1;backlog为请求队列的最大长度。<br>
   int accept(int sockfd,struct sockaddr*addr,int*addrlen);<br>
函数accept从倾听套接字的完成连接中接收一个连接,如果完成连接队列为空,那么这个进程睡眠,失败时返回-1,成功时返回新的套接字描述符。Sockfd为倾听套接字,addr为客户机的地址,addlen为地址长度,在调用时用常量NULL代替addr与addlen表示无须取出客户机的地址信息<br>
   struct hostent *gethostbyname(const char*hostname);<br>
函数gethostbyname查询指定的域名地址对应的IP地址,返回一个hostent结构的指针,如果不成功返回NULL。<br>
3.用户自定义函数。<br>
   int read_all(int fd,void*bur,int nbyte);<br>
函数read all从参数fd指定的套接字描述符中读取nbytes字节数据至缓冲区buf中,成功返回实际读的字节数(可能小于nbyte),失败返回-1。<br>
   int write_all(int fd,void*bur,int nbyte);<br>
函数write_all向参数fd指定的套接字描述符中写入缓冲区buf前nbyte字节的数据,成功返回实际写的字节数(始终等于nbyte),失败返回-1。<br>
write_requ函数为客户机发送请求的函数;read_requ函数为服务器获取请求的函数。              </p>
              <p>
                <span class="style1">
                <textarea name="textarea" cols="75" rows="10" id="textarea"></textarea>
                </span></p>
              <table width="100%" border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td width="1%" valign="top">&nbsp;</td>
                  <td width="99%" valign="top"><span class="style1" style="text-align:left;"><img src="images/anniu.gif" width="78" height="22" img style="CURSOR: hand" onClick=DisplayOrHidden(T2)></span>
                      <table width="96%" border="0">
                        <tr>
                          <td><p align=left style='text-align:left;'>                
                              <span class="style1"><SPAN id=T2 style="BORDER-RIGHT: #ffffff 1px solid; BORDER-TOP: #ffffff 1px solid; DISPLAY: none; BORDER-LEFT: #ffffff 1px solid; COLOR: black; BORDER-BOTTOM: #ffffff 1px solid; FONT-FAMILY: 宋体"><span class="STYLE1" style="font-family: 宋体">
                              【答案】(1)socket(AF_INET,SOCK_STREAM,0)<br>
                              (2)INADDR_ANY<br>
                              (3)htons(SERVER_PORT)<br>
                              (4)listenfd,(struct sockaddr*)&amp;servaddr,sizeof(servaddr)<br>
                              (5)accept(listenfd,NULL,NULL)<br>
                              (6)nbytes==0<br>
                              (7)buf+6<br>
                              (8)offset==size<br>
                              (9)maxlen<br>
                              (10)ch==`\n`<br>
                              </span></p>
                          </td>
                        </tr>
                    </table></td>
                </tr>
              </table>
              <p class="style1">● 试题三<br>
                阅读以下说明和交换机的配置信息,回答问题1~3,将解答填入答题纸的对应栏内。<br>
                【说明】<br>
              某公司下设3个部门,为了便于管理,每个部门组成一个VLAN,公司网络结构如图1所示。</p>
              <p align="center" class="style1"><img src="images/xiawu4001.gif" width="578" height="222"><br>
              图1 网络结构图</p>
              <p align="left" class="style1"><br>
                【交换机Switch1的部分配置信息】<br>
                   Switch1 (config)#tinterface fO/9<br>
                   Switch1(config-if)#switchport mode access<br>
                   Switch1(config-if)#switchport access vlan 11<br>
                   Switch1(config)#interface fO/10<br>
                   Switch1(config-if)#switchport mode access<br>
                   Switch1(config-if)#switchport access vlan 12<br>
                   Switch1(config)#interface fO/17<br>
                   Switch1(config-if)#switchport mode access<br>
                   Switch1(config-if)#switchport access vlan 13<br>
                【交换机Switch2的部分配置信息】<br>
                   Switch2(config)#interface fO/6<br>
                   Switch2(config-if)#switchport mode access<br>
                   Switch2(config-if)#switchport access vlan 11<br>
                   Switch2(config)#interface fO/8<br>
                   Switch2(config-if)#switchport mode access<br>
                   Switch2(config-if)#switchport access vlan 12<br>
                   Switch2(config)#intefface fO/11<br>
                   Switch2(config-if)#switchport mode access<br>
                   Switch2(config-if)#switchport access vlan 13<br>
                【交换机Switch3的部分配置信息】<br>
                   Switch3(config)#interface fO/3<br>
                   Switch3(config-if)#switchport mode access<br>
                   Switch3(config-if)#switchport access vlan 11<br>
                   Switch3(config-if)#exit<br>
                   Switch3(config)#interface fO/7<br>
                   Switch3(config-if)#switchport mode access<br>
                   Switch3(config-if)#switchport access vlan 12<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -