word版試題 | word版答案 |
● 試題一
單位分得合法IP地址202.112.68.40 掩碼為255.255.255.248,其中,路由器的外口和ISP之間占據(jù)了2個。
[問題1]
若使用202.112.68.41和202.112.68.41,掩碼為255.255.255.252,則可供使用的合法IP還有多少哪些?請寫出。
[問題2]
使用內(nèi)部IP進行地址轉換,若用一臺主機連接內(nèi)外兩個網(wǎng)絡,請說出2中不同的網(wǎng)絡接法;并進行比較?
[問題3]
Internet上保留了哪些內(nèi)部IP可以供使用?
● 試題二
請閱讀以下說明和Socket程序,將應填入(n)處的字句寫在答題紙的對應欄內(nèi)。
【說明】
網(wǎng)絡應用的基本模型是客戶機/服務器模型,這是一個不對稱的編程模型,通信的雙方扮演不同的角色:客戶機和服務器。
一般發(fā)起通信請求的應用程序稱為客戶軟件,該應用程序通過與服務器進程建立連接,發(fā)送請求,然后等待服務器返回所請求的內(nèi)容。服務器軟件一般是指等待接收并處理客戶機請求的應用程序,通常由系統(tǒng)執(zhí)行,等待客戶機請求,并且在接收到請求之后,根據(jù)請求的內(nèi)容,向客戶機返回合適的內(nèi)容。
本題中的程序較為簡單,客戶機接收用戶在鍵盤上輸入的文字內(nèi)容,服務器將客戶機發(fā)送來的文字內(nèi)容直接返回給客戶機,在通信過程中服務器方和客戶機方都遵守的通信協(xié)議如下:
由客戶機首先發(fā)送請求,該請求由首部和內(nèi)容兩大部分組成,兩個部分各占一行文字,通過行結束符"\n"隔離。
首部只有一個Length域,用于指定請求的內(nèi)容部分的長度,首部的結構為:"關鍵詞Length"+""+數(shù)值+"\n"。
內(nèi)容部分為一行文字,其長度必須與Length域的數(shù)值相符例如,客戶機的請求為"Length 14\nHello,my baby!",服務器接收請求處理后返回文字"Hello,my baby!"。
【Socket程序】
服務器主程序部分:
#include<stdio.h>
……//引用頭文件部分略>
#define SERVER_PORT 8080//服務器監(jiān)聽端口號為8080
#define BACKLOG 5/連接請求隊列長度
int main(int argc,char * argv[]){
int listenfd,connfd//監(jiān)聽套接字、連接套接字描述符
struct sockaddr_in servaddr;//服務器監(jiān)聽地址
listenfd= (1) ;//創(chuàng)建用于監(jiān)聽的套接字
if(listenfd<0){
fprintf(stderr,"創(chuàng)建套接字錯誤!")
exit (1) ;
}//套接字創(chuàng)建失敗時打印錯誤信息
bzero(&servaddr.sizeof(servadd));//將地址結構置空
servaddr.sin_family=AF_INET;//設置地址結構遵循TCP/IP協(xié)議
servaddr.sin_addrs_addr=htonl. (2) ;//設置監(jiān)聽的IP地址為任意合法地址,并將該地址轉換為網(wǎng)絡字節(jié)順序
servaddr.sin_port= (3) ;//設置監(jiān)聽的端口,并轉化為網(wǎng)絡字節(jié)順序
if(bind (4) <0){
fprintf(stderr,"綁定套接字與地址!");
exit (1) ;
}//將監(jiān)聽地址與用于監(jiān)聽的套接字綁定,綁定失敗時打印錯誤信息
if(listen(listedfd,BACKLOG)<0){
fprintf(stderr,轉換套接字為監(jiān)聽套接字!");
exit (1) ;
}//將用于監(jiān)聽的套接字由普通套接字轉化為監(jiān)聽套接字
for(;;){
connfd= (5) ;
//從監(jiān)聽套接字的連接隊列中接收已經(jīng)完成的連接,并創(chuàng)建新的連接套接字
if(connfd<0){
fprintf(stderr,"接收連接失敗!");
exit (1) ;
}//接收失敗打印錯誤信息
serv_respon(connfd);//運行服務器的處理函數(shù)
close(connfd);//關閉連接套接字}
dose(listenfd);//關閉監(jiān)聽套接字}
服務器通信部分:
#include<stdio.h>
< ……//引用頭文件部分略>
void serv_respon(int sockfd){
int nbytes;char bur[1024];
for(;;){
nbytes=read_requ(sockfd,bur,1024);
//讀出客戶機發(fā)出的請求,并分析其中的協(xié)議結構,獲知請求的內(nèi)容部分的長度,并將內(nèi)容復制到緩沖區(qū)buf中,
if( (6) )return;//如客戶機結束發(fā)送就退出
else if(bytes<0){
fprintf(siderr,"讀錯誤情息:%s\n",strerror(errno));
return;
} //讀請求錯誤打印錯誤信息
if(write-all(sockfd,buf,nbytes)<0)
//將請求中的內(nèi)容部分反向發(fā)送回客戶機
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);
//從套接字接收緩沖區(qū)中讀出一行數(shù)據(jù),該數(shù)據(jù)為客戶請求的首部
if(1<O)return(i);
else if(i==0)return(0);
if(stmcmp(inbuf,″″,6)==0)
scanf( (7) ,″%d″,&n); //從緩沖區(qū)buf中讀出長度信息
else{
sprintf(bur,″″,14);
return (14) ;
希望與其他軟考考生進行交流?點擊進入軟考論壇>>>
更多信息請訪問:考試吧軟件水平考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |