《網絡編程試題-參考答案【蒼松教學】》由會員分享,可在線閱讀,更多相關《網絡編程試題-參考答案【蒼松教學】(5頁珍藏版)》請在裝配圖網上搜索。
1、
華清遠見嵌入式學院第二學期期中考試
一、 選擇題(10題,每題2分,共20分)
1. 如果進程A調用fork函數(shù),創(chuàng)建進程B,然后進程B再調用fork函數(shù),創(chuàng)建進程C,進程C調用exec執(zhí)行新的程序,那么各個進程將以什么順序來執(zhí)行:( D )。
[A] 以A、B、C的順序執(zhí)行
[B] 以C、B、A的順序執(zhí)行
[C] 以B、C、A的順序執(zhí)行
[D] 無固定執(zhí)行順序
2. 以下對早期ARPAnet的描述不正確的是 ( D )
[A] 使用NCP協(xié)議 [B] 不能互聯(lián)不同類型的計算機
[C] 沒有糾錯功能
2、 [D] 可以互聯(lián)不同類型的操作系統(tǒng)
3. Internet中的世界語是 ( C )
[A] TCP [B] IP [C] TCP/IP [D] http
4. 以下不屬于socket的類型的是 ( D )。
[A] 流式套接字
[B] 數(shù)據報套接字
[C] 原始套接字
[D] 網絡套接字
5. 以下關于socket的描述錯誤的是 ( C )
[A] 是一種文件描述符
[B] 是一個編程接口
[C] 僅限于TCP/IP
[D] 可用于一臺主機內
3、部不同進程間的通信
6. 路由器是根據哪一層的信息為數(shù)據包選擇路由 ( C )
[A] 物理層 [B] 數(shù)據鏈路層 [C] 網絡層 [D] 傳輸層
7. 為了解決在不同體系結構的主機之間進行數(shù)據傳遞可能會造成歧義的問題,以下( A )函數(shù)常常用來在發(fā)送端和接收端對雙字節(jié)或者四字節(jié)數(shù)據類型進行字節(jié)序轉換。
[A] htons()/htonl()/ntohs()/ntohl()
[B] inet_addr()/inet_aton()/inet_...
[C] gethostbyname()/gethostbyadd
4、r()
[D] (struct sockaddr *)&(struct sockaddr_in類型參數(shù))
8. 在實現(xiàn)基于TCP的網絡應用程序時,服務器端正確的處理流程是( C )
[A] socket() -> bind() -> listen() -> connect() -> read()/write() -> close()
[B] socket() -> bind() -> listen() -> read()/write() -> close()
[C] socket() -> bind() -> listen() -> accept() -> read()/wr
5、ite() -> close()
[D] socket() -> connect() -> read()/write() -> close()
9. 只用于同一主機內部進程間通信的socket應使用的協(xié)議族是 ( B )
[A] AF_INET [B] AF_UNIX [C] AF_NS [D] AF_IMPLINK
10. 以下哪個協(xié)議不是用在網絡層的 ( D )
[A] IGMP [B] IP [C] ICMP [D] SMTP
二、 判斷題(15題,每題1分)
6、
1. 信號是一種同步通訊方式 ( F )
2. 可以使用signal()來給同一進程組中的所有進程發(fā)送信號 ( F )
3. 從一個空FIFO中讀取數(shù)據時會發(fā)生阻塞,但從一個空PIPE中讀取數(shù)據時不會發(fā)生阻塞 ( F )
4. IP地址均為32位 ( F )
5. 大端序表示高位字節(jié)存儲在高地址 ( F )
6. bind()函數(shù)用于將套接字和某個地址綁定 ( T )
7. connect()函數(shù)既可以用于TCP,也可以用于UDP ( T )
8. 每個套接字最多只能connect一次 ( F )
9. 為了區(qū)分一臺主機接收到的網絡數(shù)據包應該
7、遞交給哪個套接字來處理,要根據端口號 ( T )
10. 無論是TCP socket,還是UDP socket,它們的服務器端必須調用bind()函數(shù)來綁定一個地址,這樣客戶端才可以和服務器端通信 ( T )
11. 發(fā)送一個UDP數(shù)據報,必須使用sendto()函數(shù) ( F )
12. 當inet_addr(char *address)的參數(shù)address包含不合法的IP地址時,函數(shù)返回0 ( F )
閱讀以下程序,完成13-15題。
┋
listenfd = socket(…);
bind(listenfd,…);
li
8、sten(listenfd,…);
for ( ; ; ) {
connfd = accept(listenfd, …);
if (( pid = fork( )) == 0)
{
recv(connfd,…);
send(connfd,…);
}
else exit(0);
}
13. 這是一個并發(fā)服務器。( F )
14. 在任何時候,該服務器只能處理一個客戶端的請求。( T )
15. 隨著服務器端接受越來越多的請求,connfd的值變得越來
9、越大。( T )
三、簡答題(5題,每題5分,共25分)
1. 如何在并發(fā)程序中避免僵尸進程?(父進程不阻塞,不輪詢,描述思路或寫出代碼)
方式一:在父進程中忽略SIGCHLD信號
方式二:在父進程中捕捉SIGCHLD信號,并在信號處理函數(shù)中用waitpid回收子進程
2. 兩個線程分別讀寫同一個緩沖區(qū),初始時緩沖區(qū)中無數(shù)據。
( read() //讀緩沖區(qū) write() //寫緩沖區(qū) sem_t //信號量類型
void init_sem(sem_t *s, int value) // 初始化信號量s
10、的值為value
void p(sem_t *s) // 對信號量s進行p操作
void v(sem_t *s) // 對信號量s進行v操作)
① 定義需要的信號量并初始化
sem_t s_r, s_w;
init_sem(&s_r, 0);
init_sem(&s_w, 1);
②寫線程寫緩沖區(qū)的代碼
p(&sem_w);
write();
v(&sem_r);
③讀線程讀緩沖區(qū)的代碼
p(&sem_r);
read();
v(&sem_w);
3. 簡述TCP
11、和 UDP的異同點
相同點:都是傳輸層協(xié)議
不同點:tcp協(xié)議面向連接,提供可靠的傳輸;udp協(xié)議無連接,不保證可靠的傳輸
4. 什么是高可靠性通信?
數(shù)據無錯誤、數(shù)據無丟失、數(shù)據無失序、數(shù)據無重復到達
5. 簡述UNIX/Linux下主要的四種IO模型的特點
阻塞式IO :最簡單、最常用;效率低
非阻塞式IO :可以處理多路IO;需要輪詢,浪費CPU資源
IO多路復用 :同時出路多路IO且不需要輪詢
信號驅動IO :異步通知模式,需要底層驅動的支持
四、綜合題(3題,共40分,編程題可省略頭文件)
1. 什
12、么是網絡體系結構? 畫出OSI和TCP/IP參考模型的對應關系圖(包括每層常用的協(xié)議或應
2. 編寫一個TCP并發(fā)服務器端程序,可以把客戶端發(fā)來的消息回射給客戶端 (15分)
3. 編寫UDP程序,通過多路IO復用同時處理標準輸入和套接字。當輸入為quit時程序結束;當通過套接字收到對方消息時回射給對方 (15分)
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeval);
void FD_CLR(int fd, fd_set *set);
int FD_ISSET(int fd, fd_set *set);
void FD_SET(int fd, fd_set *set);
void FD_ZERO(fd_set *set);
5
教育專業(yè)b