Đề thi cuối kỳ môn Lập trình mạng | Đại học Bách khoa Hà Nội

Tổng hợp Đề thi cuối kỳ môn Lập trình mạng của Đại học Bách khoa Hà Nội. Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao trong kỳ thi sắp tới. Mời bạn đọc đón xem!

PHN TR LI TRC NGHIM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
PHN CÂU HI
1. Thư viện liên kết động ca Windows Socket có tên là:
a. WinSock.DLL
b. WinSock2.DLL
c. WS2.DLL
d. WS2_32.DL
2. Để có th s dng thư viện Windows Socket, tệp tiêu đề cn khai báo là:
a. Winsock.h
b. Winsock2.h
c. Ws2_32.h
d. Ws2.h
3. Công c chuẩn đoán mạng dùng để hin th các kết ni hin có trên máy tính là
a. Wireshark
b. TCPView
c. Netcat
d. Tt c
4. Công c dùng để theo dõi tài nguyên s dng ca máy tính trên h điu hành Windows là
a. Task Manager
b. ResourceMonitor
c. Wireshark
d. a và b.
5. Công c dùng để bt các gói tin gi ra và vào mt giao din mng ca máy tính là
a. Netcat
b. Network Monitor
c. Cain
d. C ba đều sai.
6. Công c đa năng, vừa có th đóng vai trò client, vừa server, chy trên giao thc TCP, UDP là.
a. Netcat
b. TCPDump
c. Netstat
d. Network Monitor
7. Nếu cn phi viết mt ng dng cn tính đáp ứng nhanh và chp nhn sai sót. Giao thc la chn s
a. TCP
b. IP
c. ICMP
d. UDP
8. Dch v phân gii tên min chy tng nào trong các tầng sau đây
a. Application
b. Transport
c. Internetwork
d. Datalink
9. Giao thức nào được s dụng đ chia s một địa ch toàn cc cho mt nhóm các máy tính trong mng LAN.
a. VLAN
b. MAC
c. NAT
d. Không đáp án nào đúng
10. Trong mt mạng máy tính được chia s chung một địa ch IP toàn cc. Thiết lp nào sau đây sẽ cho phép mt máy tính t
Internet ch động kết nối đến mt máy ch trong mng.
a. DMZ
b. Virtual Server
c. Port Forwarding
d. C ba phương án trên.
11. Công c nào s dng để kim tra hoạt động ca mt máy ch phân gii tên min
a. Ping
b. Nslookup
c. Netstat
d. Ipconfig
12. Nếu cn phát trin thêm trình điều khin cho mt loi thiết b mi. ng dng s phi viết tng nào ca Windows Socket
a. Application
b. Provider
c. Transport Protocol
d. Không tầng nào đúng
13. Nếu cn phi thiết kế mt giao thc mi, ng dng s phi tích hp vào tng nào ca Windows Socket API
a. Application
b. Provider
c. Transport Protocol
d. Không tầng nào đúng.
14. Trình điều khin cho mt thiết b mng s đưc chy chế độ
a. User Mode
b. Kernel Mode
c. System Mode
d. Không phương án nào đúng.
15. Biên ca thông đip trong các giao thức hướng dòng có đưc bo toàn hay không ?
a.
ĐỀ THI MÔN LP TRÌNH MNG
Thời gian: 60 phút Không được phép dùng tài liệu
Điền trực tiếp kết quả vào phần trả lời trắc nghiệm
515
b. Không
c. Tùy từng trường hp, nếu đưc t chc hp lý.
16. Hàm nào sau đây thc hin công vic khi to Windows Socket
a. WSStartup
b. WinsockStartup
c. SocketStartup
d. WSAStartup
17. WSADATA là cu trúc dùng để
a. Truyn thông tin v phiên bn WinSock mà ng dng mun khi to
b. Nhn thông tin v phiên bn WinSock có trên h thng.
c. C hai đáp án đều sai.
18. Hàm nào sau đây s dụng để gii phóng Windows Socket API.
a. WSACleanup
b. WSCleanup
c. Cleanup
d. Phương án khác:…
19. Để ly mã li của thao tác ngay trước đó. Hàm nào sau đây s đưc s dng
a. GetLastError
b. WSAGetError
c. WSAGetLastError
d. WSALastError
20. Đoạn chương trình sau thực hin kết nối đến một server, điền vào v trí <A>, <B>, <C> các lnh còn thiếu.
ret = connect(s, (sockaddr*)&serverAddr,sizeof(serverAddr));
if (ret ==SOCKET_ERROR) {
printf(“Loi ket noi: %d”, <A>);
<B>;
<C>;
};
a. <A>: GetLastError, <B>: closesocket (s), <C>: WSACleanup().
b. <A>: WSAGetLastError(), <B> close(s), <C>: Cleanup().
c. <A>: WSALastError(), <B>: closesocket(s), <C>: đ trng.
d. Không phương án nào đúng.
21. Trong Windows Socket, vi các hàm không có tin t WSA thì mã li tr v là 0 có nghĩa là:
a. Thành công
b. Tht bi
c. Tùy trường hp
22. Lệnh nào sau đây dùng để to mt socket TCP
a. socket(AF_INET,SOCK_STREAM,IPPROTO_TCP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
d. socket(AF_INET,SOCKSTREAM,IPPROTOTCP).
23. Lệnh nào sau đây dùng để to mt socket UDP
a. socket(AF_INET,SOCK_UDP, IPPROTO_TCP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
d. Không lệnh nào đúng.
24. Cấu trúc nào được s dụng để khai báo địa ch socket internet:
a. sock_addr
b. sockaddr
c. sockaddr_in
d. sock_addr_in
25. Các giá tr lớn hơn 01 byte trong cấu trúc lưu trữ địa ch của socket được t chc theo kiu:
a. Đầu to
b. Đầu nh
c. Tùy trường hp
26. Để chuyn đi một xâu sang địa ch IP, lệnh nào sau đây là đúng
a. inet_ntoa(“192.168.1.1”);
b. inet_aton(“192.168.1.1”);
c. inet_addr(“192.168.1.1”);
d. inet_stoi(“192.168.1.1”);
27. Để chuyn đi một địa ch IP lưu trong biến serverAddr lưu trữ địa ch socket sang dng xâu ký t, lệnh nào sau đây là
đúng
a. inet_ntos(serverAddr.sin_addr);
b. inet_ntoa(serverAddr.s_addr);
c. inet_itos(serverAddr.sin_addr);
d. inet_ntoa(serverAddr.sin_addr);
28. Để chuyn đi giá tr cng t đầu nh sang đu to, lệnh nào sau đây sẽ đưc s dng
a. ntohl
b. ntohs
c. htonl
d. htons
29. Trong li gi hàm recv(s,buff,1024,0), giá tr 1024 có nghĩa là:
a. S byte mun nhn
b. S byte tối đa muốn nhn.
c. Kích thước b đệm.
d. C b và c đều đúng.
30. Để thc hin phân gii tên min bng WinSock, cn b sung tệp tiêu đề nào
a. Winsock2.h
b. Ws2_32.h
c. Ws2ip.h
d. Ws2tcpip.h
Đoạn chương sau nhận v mt xâu và gi tr xâu theo th t ngược lại. Điền vào các v trí <A>,<B>,<C>,<D>,<E> các câu lnh
thích hp:
SOCKET s;
char c, str[1024];
int i,len;
while (1)
{
len = recv(s,str,1024,0);
str[<A>] = 0;
for (i=0;i<len/2;i++)
{
c = <B>; str[i] = str[<C>]; str[len-i-1]=<D>;
};
send(<E>,str,len,0);
}
31. Câu lnh thích hp cho <A> là
a. len
b. i
c. 1024
d. 0
32. Câu lnh thích hp cho <B> là
a. str[0]
b. str[len]
c. str[len-1]
d. str[i]
33. Câu lnh thích hp cho <C> là
a. len/2
b. len-1
c. len-i
d. len-i-1
34. Câu lnh thích hp cho <D> là
a. c
b. str[i]
c. str[0]
d. str[i-1]
35. Câu lnh thích hp cho <E> là
a. c
b. s
c. len
d. i
Đoạn chương trình sau đọc ni dung mt tp tin và gửi đi qua kết ni c đã được thành lp.
Đin vào các v trí <A> , <B>…các câu lnh/giá tr thích hp
SOCKET c;
FILE * fp;
char buff[1024];
int len;
fp = fopen("name.txt","rb");
while (<A>)
{
len = fread(<B>,1,1024,<C>);
if (len <=0)
break;
send(<D>,buff,<E>,0);
};
closesocket(c);
fclose(fp);
36. Giá tr thích hp cho <A> là
a. fp
b. feof(fp)
c. !fp
d. !feof(fp)
37. Giá tr thích hp cho <B> là
a. buff
b. fp
c. c
d. &buff
38. Giá tr thích hp cho <C> là
a. buff
b. &buff
c. fp
d. &fp
39. Giá tr thích hp cho <D> là
a. s
b. &s
c. fp
d. &fp
40. Giá tr thích hp cho <E> là
a. 1024
b. len
c. &len
d. 0.
PHN TR LI TRC NGHIM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
PHN CÂU HI
1. Thư viện liên kết động ca Windows Socket có tên là:
a. WinSock.DLL
b. WinSock2.DLL
c. WS2.DLL
d. WS2_32.DL
2. Công c dùng để theo dõi tài nguyên s dng ca máy tính trên h điu hành Windows là
a. Task Manager
b. ResourceMonitor
c. Wireshark
d. a và b.
3. Để có th s dụng thư viện Windows Socket, tệp tiêu đề cn khai báo là:
a. Winsock.h
b. Winsock2.h
c. Ws2_32.h
d. Ws2.h
4. Để có th s dng dụng thư viện Windows Socket, tệp thư viện cn khai báo cho quá trình liên kết là.
a. Winsock.lib
b. WS2_32.LIB
c. WS2_32.DLL
d. Winsock2.dll
5. Nếu cn phi viết mt ng dng cn tính đáp ứng nhanh và chp nhn sai sót. Giao thc la chn s
a. TCP
b. IP
c. ICMP
d. UDP
6. Công c nào s dng để kim tra hoạt động ca mt máy ch phân gii tên min
a. Ping
b. Nslookup
c. Netstat
d. Ipconfig
7. Công c chuẩn đoán mạng dùng để hin th các kết ni hin có trên máy tính là
a. Wireshark
b. TCPView
c. Netcat
d. Tt c
8. Công c dùng để bt các gói tin gi ra và vào mt giao din mng ca máy tính là
a. Netcat
b. Wireshark
c. Cain
d. C ba đều sai.
9. Công c đa năng, vừa có th đóng vai trò client, vừa server, chy trên giao thc TCP, UDP là.
a. Netcat
b. TCPDump
c. Netstat
d. Network Monitor
10. Dch v phân gii tên min chy tng nào trong các tầng sau đây
a. Application
b. Transport
c. Internetwork
d. Datalink
11. Giao thức nào được s dụng đ chia s một địa ch toàn cc cho mt nhóm các máy tính trong mng LAN.
a. VLAN
b. MAC
c. NAT
d. Không đáp án nào đúng
12. Trong mt mạng máy tính được chia s chung một địa ch IP toàn cc. Thiết lp nào sau đây sẽ cho phép mt máy tính t
Internet ch động kết nối đến mt máy ch trong mng.
a. DMZ
b. Virtual Server
c. Port Forwarding
d. C ba phương án trên.
13. Nếu cn phát trin thêm trình điều khin cho mt loi thiết b mi. ng dng s phi viết tng nào ca Windows Socket
a. Application
b. Provider
c. Transport Protocol
d. Không tầng nào đúng
14. Nếu cn phi thiết kế mt giao thc mi, ng dng s phi tích hp vào tng nào ca Windows Socket API
a. Application
b. Provider
c. Transport Protocol
d. Không tng nào đúng.
15. Trình điều khin cho mt thiết b mng s đưc chy chế độ
a. User Mode b. Kernel Mode
ĐỀ THI MÔN LP TRÌNH MNG
Thời gian: 60 phút Không được phép dùng tài liệu
Điền trực tiếp kết quả vào phần trả lời trắc nghiệm
217
c. System Mode d. Không phương án nào đúng.
16. Biên của thông điệp trong các giao thức hướng dòng có được bo toàn hay không ?
a.
b. Không
c. Tùy từng trường hp, nếu đưc t chc hp lý.
17. Hàm nào sau đây thc hin công vic khi to Windows Socket
a. WSStartup
b. WinsockStartup
c. SocketStartup
d. WSAStartup
18. WSADATA là cu trúc dùng để
a. Truyn thông tin v phiên bn WinSock mà ng dng mun khi to
b. Nhn thông tin v phiên bn WinSock có trên h thng.
c. C hai đáp án đều sai.
19. Để chuyn đi giá tr cng t đầu nh sang đu to, lệnh nào sau đây sẽ đưc s dng
a. ntohl
b. ntohs
c. htonl
d. htons
20. Hàm nào sau đây s dụng để gii phóng Windows Socket API.
a. WSACleanup
b. WSCleanup
c. Cleanup
d. Phương án khác:…
21. Để ly mã li của thao tác ngay trước đó. Hàm nào sau đây s đưc s dng
a. GetLastError
b. WSAGetError
c. WSAGetLastError
d. WSALastError
22. Để chuyn đi một địa ch IP lưu trong biến serverAddr lưu trữ địa ch socket sang dng xâu ký t, lệnh nào sau đây là
đúng
a. inet_ntos(serverAddr.sin_addr);
b. inet_ntoa(serverAddr.s_addr);
c. inet_ntoa(serverAddr.sin_addr);
d. inet_itos(serverAddr.sin_addr);
23. Lệnh nào sau đây dùng để to mt socket TCP
a. socket(AF_INET,SOCK_STREAM,IPPROTO_TCP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
d. socket(AF_INET,SOCKSTREAM,IPPROTOTCP).
24. Lệnh nào sau đây dùng để to mt socket UDP
a. socket(AF_INET,SOCK_UDP, IPPROTO_TCP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
d. Không lệnh nào đúng.
25. Đoạn chương trình sau thực hin kết nối đến một server, điền vào v trí <A>, <B>, <C> các lnh còn thiếu.
ret = connect(s, (sockaddr*)&serverAddr,sizeof(serverAddr));
if (ret ==SOCKET_ERROR) {
printf(“Loi ket noi: %d”, <A>);
<B>;
<C>;
};
a. <A>: GetLastError, <B>: closesocket (s), <C>: WSACleanup().
b. <A>: WSAGetLastError(), <B> close(s), <C>: Cleanup().
c. <A>: WSALastError(), <B>: closesocket(s), <C>: đ trng.
d. Không phương án nào đúng.
26. Để chuyn đi một xâu sang địa ch IP, lệnh nào sau đây là đúng
a. inet_ntoa(“192.168.1.1”);
b. inet_aton(“192.168.1.1”);
c. inet_addr(“192.168.1.1”);
d. inet_stoi(“192.168.1.1”);
27. Trong Windows Socket, vi các hàm không có tin t WSA thì mã li tr v là 0 có nghĩa là:
a. Thành công
b. Tht bi
c. Tùy trường hp
28. Cấu trúc nào được s dụng để khai báo địa ch socket internet:
a. sock_addr
b. sockaddr
c. sockaddr_in
d. sock_addr_in
29. Các giá tr ln hơn 01 byte trong cấu trúc lưu trữ địa ch của socket được t chc theo kiu:
a. Đầu to
b. Đầu nh
c. Tùy trường hp
30. Để thc hin phân gii tên min bng WinSock, cn b sung tệp tiêu đề nào
a. Winsock2.h
b. Ws2_32.h
c. Ws2ip.h
d. Ws2tcpip.h
Đoạn chương trình sau đọc ni dung mt tp tin và gửi đi qua kết nối c đã được thành lp.
Đin vào các v trí <A> , <B>…các câu lnh/giá tr thích hp
SOCKET c;
FILE * fp;
char buff[1024];
int len;
fp = fopen("name.txt","rb");
while (<A>)
{
len = fread(<B>,1,1024,<C>);
if (len <=0)
break;
send(<D>,buff,<E>,0);
}7s
closesocket(c);
fclose(fp);
31. Giá tr thích hp cho <A> là
a. fp
b. feof(fp)
c. !fp
d. !feof(fp)
32. Giá tr thích hp cho <B> là
a. buff
b. fp
c. c
d. &buff
33. Giá tr thích hp cho <C> là
a. buff
b. &buff
c. fp
d. &fp
34. Giá tr thích hp cho <D> là
a. s
b. &s
c. fp
d. &fp
35. Giá tr thích hp cho <E> là
a. 1024
b. len
c. &len
d. 0.
Đoạn chương sau nhận v mt xâu và gi tr xâu theo th t ngược lại. Điền vào các v trí <A>,<B>,<C>,<D>,<E> các câu lnh
thích hp:
SOCKET s;
char c, str[1024];
int i,len;
while (1)
{
len = recv(s,str,1024,0);
str[<A>] = 0;
for (i=0;i<len/2;i++)
{
c = <B>; str[i] = str[<C>]; str[len-i-1]=<D>;
};
send(<E>,str,len,0);
}
36. Câu lnh thích hp cho <A> là
a. len
b. i
c. 1024
d. 0
37. Câu lnh thích hp cho <B> là
a. str[0]
b. str[len]
c. str[len-1]
d. str[i]
38. Câu lnh thích hp cho <C> là
a. len/2
b. len-1
c. len-i
d. len-i-1
39. Câu lnh thích hp cho <D> là
a. c
b. str[i]
c. str[0]
d. str[i-1]
40. Câu lnh thích hp cho <E> là
a. c
b. s
c. len
1. Thư viện liên kết động ca Windows Socket có tên là:
a. WinSock.DLL
b. WinSock2.DLL
c. WS2.DLL
d. WS2_32.DLL
2. Công c nào s dụng để kim tra hoạt động ca mt máy
ch phân gii tên min
a. Ping
b. Nslookup
c. Netstat
d. Ipconfig
3. Biên của thông điệp trong các giao thức hướng dòng
đưc bo toàn hay không ?
a.
b. Không
c. Tùy từng trường hp, nếu đưc t chc hp lý.
4. Công c dùng để theo dõi i nguyên s dng ca máy
tính trên h điu hành Windows là
a. Task Manager
b. Resource Monitor
c. Wireshark
d. Phương án a và b.
5. Nếu cn phát trin thêm trình điều khin cho mt loi
thiết b mi. ng dng s phi viết tng nào ca
Windows Socket
a. Application
b. Provider
c. Transport Protocol
d. Không tầng nào đúng
6. Công c ng để bt các i tin gi ra o mt giao
din mng ca máy tính là
a. Netcat
b. Network Monitor
c. Cain
d. Không phương án nào đúng.
7. Công c đa năng, vừa th đóng vai trò client, vừa
server, chy trên giao thc TCP, UDP là.
a. Netcat
b. TCPDump
c. Netstat
d. Network Monitor
8. WSADATA là cu trúc dùng để
a. Truyn thông tin v phiên bn WinSock ng
dng mun khi to
b. Nhn thông tin v phiên bn WinSock trên
h thng.
c. C hai đáp án đều sai.
9. Để th s dụng thư viện Windows Socket, tệp tiêu đề
cn khai báo là:
a. Winsock.h
b. Winsock2.h
c. Ws2_32.h
d. Ws2.h
10. Nếu cn phi viết mt ng dng cần tính đáp ứng nhanh
và chp nhn sai sót. Giao thc la chn s
a. TCP
b. IP
c. ICMP
d. UDP
11. Dch v phân gii tên min chy tng nào trong các
tầng sau đây
a. Application
b. Transport
c. Internetwork
d. Datalink
12. Giao thc nào đưc s dụng để chia s một địa ch toàn
cc cho mt nhóm các máy tính trong mng LAN.
a. VLAN
b. MAC
c. NAT
d. Không đáp án nào đúng
13. Trong mt mạng y tính được chia s chung một địa
ch IP toàn cc. Thiết lập nào sau đây sẽ cho phép mt
máy tính t Internet ch động kết nối đến mt máy ch
trong mng.
a. DMZ
b. Virtual Server
c. Port Forwarding
d. C ba phương án trên.
14. Để th s dng dng thư viện Windows Socket, tp
thư viện cn khai báo cho quá trình liên kết là.
a. Winsock.lib
b. WS2_32.LIB
c. WS2_32.DLL
d. Winsock2.dll
15. Nếu cn phi thiết kế mt giao thc mi, ng dng s
phi tích hp vào tng nào ca Windows Socket API
a. Application
b. Provider
c. Transport Protocol
d. Không tầng nào đúng.
16. Công c chuẩn đoán mạng dùng để hin th các kết ni
hin có trên máy tính là
a. Wireshark
b. TCPView
c. Netcat
d. Tt c các công c trên
17. Trình điều khin cho mt thiết b mng s đưc chy
chế độ
a. User Mode
b. Kernel Mode
c. System Mode
d. Không phương án nào đúng.
18. Hàm nào sau đây thc hin công vic khi to Windows
Socket
a. WSStartup
b. WinsockStartup
c. SocketStartup
d. WSAStartup
ĐỀ THI GIA K MÔN LP TRÌNH MNG
Thời gian: 90 phút Không được phép dùng tài liệu
Phn 1. Trc nghim
(6đ – tô kết qu vào phiếu tr li trc nghim)
247
19. Hàm nào sau đây s dụng để gii phóng Windows Socket API.
a. WSACleanup
b. WSCleanup
c. Cleanup
d. Phương án khác:…
20. Lnh nào sau đây dùng để to mt socket TCP
a. socket(AF_INET,SOCK_STREAM,IPPROTO_TCP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
d. socket(AF_INET,SOCKSTREAM,IPPROTOTCP).
21. Cấu trúc nào được s dụng để khai báo địa ch socket
internet:
a. sock_addr
b. sockaddr
c. sockaddr_in
d. sock_addr_in
22. Các giá tr lớn hơn 01 byte trong cấu trúc lưu trữ địa ch
của socket đưc t chc theo kiu:
a. Đầu to
b. Đầu nh
c. Tùy trường hp
23. Để ly li của thao tác ngay trước đó. Hàm nào sau
đây sẽ đưc s dng
a. GetLastError
b. WSAGetError
c. WSAGetLastError
d. WSALastError
24. Để chuyn đổi một xâu sang đa ch IP, lệnh nào sau đây
là đúng
a. inet_ntoa(“192.168.1.1”);
b. inet_aton(“192.168.1.1”);
c. inet_addr(“192.168.1.1”);
d. inet_stoi(“192.168.1.1”);
25. Trong Windows Socket, vi các hàm không tin t
WSA thì mã li tr v là 0 có nghĩa là:
a. Thành công
b. Tht bi
c. Tùy trường hp
26. Đoạn chương trình sau thc hin kết nối đến mt
server, điền vào v trí <A>, <B>, <C> các lnh còn thiếu.
ret = connect(s,
(sockaddr*)&serverAddr,sizeof(serverAddr));
if (ret ==SOCKET_ERROR) {
printf(“Loi ket noi: %d”, <A>);
<B>;
<C>;
};
a. <A>: GetLastError, <B>: closesocket (s), <C>:
WSACleanup().
b. <A>: WSAGetLastError(), <B> close(s), <C>:
Cleanup().
c. <A>: WSALastError(), <B>: closesocket(s),
<C>: để trng.
d. Không phương án nào đúng.
27. Để chuyển đi một địa ch IP lưu trong biến serverAddr
lưu trữ địa ch socket sang dng xâu t, lnh o sau
đây là đúng
a. inet_ntos(serverAddr.sin_addr);
b. inet_ntoa(serverAddr.s_addr);
c. inet_itos(serverAddr.sin_addr);
d. inet_ntoa(serverAddr.sin_addr);
28. Lệnh nào sau đây dùng để to mt socket UDP
a. socket(AF_INET,SOCK_UDP, IPPROTO_TCP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
d. Không lệnh nào đúng.
29. Để chuyển đổi giá tr cng t đầu nh sang đầu to, lnh
nào sau đây sẽ đưc s dng
a. ntohl
b. ntohs
c. htonl
d. htons
30. Để thc hin phân gii tên min bng WinSock, cn b
sung tệp tiêu đề nào
a. Winsock2.h
b. Ws2_32.h
c. Ws2ip.h
d. Ws2tcpip.
Phn 2. T lun
(4đ – viết ra giy t chun b)
Viết chương trình FileClient s dng mô hình blocking làm nhim v sau:
1. Kết nối đến server có địa ch/tên miền được nhp t bàn phím.
2. Nhn tên file t bàn phím và gi yêu cu tải file đến server, cú php có dạng “GET <TenFile>\n”.
3. X lý kết qu t server
a. Nếu server báo li, thì d liu gi tr có dạng “FAILED\n<ThongBaoLoi>\n\n”.
b. Nếu server báo thành công thì d liu gi tr dng “OK\n<FileSize>\n<NoiDungFile>\n\n”. Phân tích kết qu
t server và ghi ni dung file nhn được ra đĩa.
4. Chương trình có thể ti nhiu file cùng mt lúc, t nhiu server.
1. Thư viện liên kết động ca Windows Socket có tên là:
a. WinSock.DLL
b. WinSock2.DLL
c. WS2.DLL
d. WS2_32.DLL
2. Biên của thông điệp trong các giao thức hướng dòng
đưc bo toàn hay không ?
a.
b. Không
c. Tùy từng trường hp, nếu đưc t chc hp lý.
3. Nếu cn phát trin thêm trình điều khin cho mt loi
thiết b mi. ng dng s phi viết tng nào ca
Windows Socket
a. Application
b. Provider
c. Transport Protocol
d. Không tầng nào đúng
4. Công c ng để bt các i tin gi ra o mt giao
din mng ca máy tính là
a. Netcat
b. Network Monitor
c. Cain
d. Không phương án nào đúng.
5. WSADATA là cu trúc dùng để
a. Truyn thông tin v phiên bn WinSock ng
dng mun khi to
b. Nhn thông tin v phiên bn WinSock trên
h thng.
c. C hai đáp án đều sai.
6. Để th s dụng thư viện Windows Socket, tệp tiêu đề
cn khai báo là:
a. Winsock.h
b. Winsock2.h
c. Ws2_32.h
d. Ws2.h
7. Trình điều khin cho mt thiết b mng s đưc chy
chế độ
a. User Mode
b. Kernel Mode
c. System Mode
d. Không phương án nào đúng.
8. Nếu cn phi viết mt ng dng cần tính đáp ứng nhanh
và chp nhn sai sót. Giao thc la chn s
a. TCP
b. IP
c. ICMP
d. UDP
9. Dch v phân gii tên min chy tng nào trong c
tầng sau đây
a. Application
b. Transport
c. Internetwork
d. Datalink
10. Công c nào s dụng để kim tra hoạt động ca mt máy
ch phân gii tên min
a. Ping
b. Nslookup
c. Netstat
d. Ipconfig
11. Giao thc nào đưc s dụng để chia s một địa ch toàn
cc cho mt nhóm các máy tính trong mng LAN.
a. VLAN
b. MAC
c. NAT
d. Không đáp án nào đúng
12. Trong mt mạng y tính được chia s chung một địa
ch IP toàn cc. Thiết lập nào sau đây sẽ cho phép mt
máy tính t Internet ch động kết nối đến mt máy ch
trong mng.
a. DMZ
b. Virtual Server
c. Port Forwarding
d. C ba phương án trên.
13. Công c dùng để theo dõi tài nguyên s dng ca máy
tính trên h điu hành Windows là
a. Task Manager
b. Resource Monitor
c. Wireshark
d. Phương án a và b.
14. Để th s dng dng thư viện Windows Socket, tp
thư viện cn khai báo cho quá trình liên kết là.
a. Winsock.lib
b. WS2_32.LIB
c. WS2_32.DLL
d. Winsock2.dll
15. Nếu cn phi thiết kế mt giao thc mi, ng dng s
phi tích hp vào tng nào ca Windows Socket API
a. Application
b. Provider
c. Transport Protocol
d. Không tng nào đúng.
16. Công c đa năng, vừa th đóng vai trò client, vừa
server, chy trên giao thc TCP, UDP là.
a. Netcat
b. TCPDump
c. Netstat
d. Network Monitor
17. Công c chuẩn đoán mạng dùng để hin th các kết ni
hin có trên máy tính là
a. Wireshark
b. TCPView
c. Netcat
d. Tt c các công c trên
18. Hàm nào sau đây thực hin công vic khi to Windows
Socket
a. WSStartup
b. WinsockStartup
c. SocketStartup
d. WSAStartup
ĐỀ THI GIA K MÔN LP TRÌNH MNG
Thời gian: 90 phút Không được phép dùng tài liệu
Phn 1. Trc nghim
(6đ – tô kết qu vào phiếu tr li trc nghim)
132
19. Hàm nào sau đây s dụng để gii phóng Windows Socket API.
a. WSACleanup
b. WSCleanup
c. Cleanup
d. Phương án khác:…
20. Lệnh nào sau đây dùng để to mt socket TCP
a. socket(AF_INET,SOCK_STREAM,IPPROTO_TCP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
d. socket(AF_INET,SOCKSTREAM,IPPROTOTCP).
21. Để chuyển đổi giá tr cng t đầu nh sang đầu to, lnh
nào sau đây sẽ đưc s dng
a. ntohl
b. ntohs
c. htonl
d. htons
22. Cấu trúc nào được s dụng để khai báo địa ch socket
internet:
a. sock_addr
b. sockaddr
c. sockaddr_in
d. sock_addr_in
23. Các giá tr lớn hơn 01 byte trong cấu trúc lưu trữ địa ch
của socket đưc t chc theo kiu:
a. Đầu to
b. Đầu nh
c. Tùy trường hp
24. Để ly li của thao tác ngay trước đó. Hàm nào sau
đây sẽ đưc s dng
a. GetLastError
b. WSAGetError
c. WSAGetLastError
d. WSALastError
25. Để chuyn đổi một xâu sang đa ch IP, lệnh nào sau đây
là đúng
a. inet_ntoa(“192.168.1.1”);
b. inet_aton(“192.168.1.1”);
c. inet_addr(“192.168.1.1”);
d. inet_stoi(“192.168.1.1”);
26. Trong Windows Socket, vi các hàm không tin t
WSA thì mã li tr v là 0 có nghĩa là:
a. Thành công
b. Tht bi
c. Tùy trường hp
27. Để chuyển đi một địa ch IP lưu trong biến serverAddr
lưu trữ địa ch socket sang dng xâu t, lnh o sau
đây là đúng
a. inet_ntos(serverAddr.sin_addr);
b. inet_ntoa(serverAddr.s_addr);
c. inet_itos(serverAddr.sin_addr);
d. inet_ntoa(serverAddr.sin_addr);
28. Đoạn chương trình sau thc hin kết nối đến mt
server, điền vào v trí <A>, <B>, <C> các lnh còn thiếu.
ret = connect(s,
(sockaddr*)&serverAddr,sizeof(serverAddr));
if (ret ==SOCKET_ERROR) {
printf(“Loi ket noi: %d”, <A>);
<B>;
<C>;
};
a. <A>: GetLastError, <B>: closesocket (s), <C>:
WSACleanup().
b. <A>: WSAGetLastError(), <B> close(s), <C>:
Cleanup().
c. <A>: WSALastError(), <B>: closesocket(s),
<C>: để trng.
d. Không phương án nào đúng.
29. Lệnh nào sau đây dùng để to mt socket UDP
a. socket(AF_INET,SOCK_UDP, IPPROTO_TCP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
d. Không lệnh nào đúng.
30. Để thc hin phân gii tên min bng WinSock, cn b
sung tệp tiêu đề nào
a. Winsock2.h
b. Ws2_32.h
c. Ws2ip.h
d. Ws2tcpip.
Phn 2. T lun
(4đ – viết ra giy t chun b)
Viết chương trình FileClient s dng mô hình select làm nhim v sau:
1. Kết nối đến server có địa ch/tên miền được nhp t bàn phím.
2. Nhn tên file t bàn phím và gi yêu cu tải file đến server, cú php có dạng “GET <TenFile>\n”.
3. X lý kết qu t server
a. Nếu server báo li, thì d liu gi tr có dạng “FAILED\n<ThongBaoLoi>\n\n”.
b. Nếu server báo thành công thì d liu gi tr dng “OK\n<FileSize>\n<NoiDungFile>\n\n”. Phân tích kết qu
t server và ghi ni dung file nhn được ra đĩa.
4. Chương trình có th ti nhiu file cùng mt lúc.
Bộ môn KTMT
ĐỀ THI MÔN: LẬP TRÌNH MẠNG
HỌ VÀ TÊN:………………………………………….…… SHSH: …………….…..…. LỚP: ……..……
STT
Thời gian làm bài: 90 phút
Không được sử dụng tài liệu
Ngày thi: 1/4/2014
ĐỀ
1
Một giao thức chat đơn giản chạy ở cổng TCP 8888 và được mô tả bằng các gói tin gửi nhận giữa client và
server có cấu trúc như sau:
typedef struct {
int iType;
int iLength;
char szNickname[32];
char bData[1024];
}
Trong đó:
iType là loại gói tin. Có thể nhận một trong các giá trị sau:
o iType = 0: Đăng nhập, được gửi từ client => server, khi đó iLength = 0 và szNickname là
nickname client muốn đăng kí với server. Giả sử việc đăng nhập không cần mật khẩu và server
sẽ luôn luôn chấp nhận bất kì nickname nào, kể cả nickname đã sử dụng trước đó.
o iType = 1: Chat, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì iLength là chiều dài câu thoại, szNickname là nickname đích sẽ nhận câu thoại. Server
nhận được gói tin này sẽ chỉnh sửa lại trường szNickname của gói tin và chuyển tiếp đến client.
Client khi nhận được gói tin này sẽ hiểu szNickname là nickname gửi.
o iType = 2: List, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì có nghĩa là client muốn lấy danh sách các nickname đang đăng nhập. Ilength lúc đó
bằng 0 và bData không có ý nghĩa gì. Nếu được gửi từ server => client nghĩa là server thông báo
danh sách các nickname đang đăng nhập, iLength sẽ là chiều dài dữ liệu phần bData, bData sẽ
chứa danh sách các nickname, mỗi nickname chiếm chính xác 32 kí tự (mặc dù thực tế có thể ít
hơn, khi đó các kí tự NULL sẽ được thêm vào cho đủ 32 kí tự). Ví dụ có 3 nickname thì iLength =
96 và bData[0] chứa nickname thứ 1, bData[32] chứa nickname thứ 2, và bData[64] chứa
nickname thứ 3. Server có thể chủ động gửi gói tin này đến tất cả các client mỗi khi có một client
vừa đăng nhập hoặc đăng xuất.
iLength: Chiều dài dữ liệu phần bData, có thể dài tối đa 1024 kí tự.
szNickname: Mang nhiều ý nghĩa, tùy theo trường iType: Nickname muốn đăng nhập, nickname muốn
gửi tin nhắn hoặc nickname vừa gửi tin nhắn.
bData: dữ liệu của gói tin, mang nhiều ý nghĩa tùy theo trường iType.
Ban đầu khi client muốn tham gia vào hệ thống, nó phải gửi gói tin để đăng nhập với nickname do người
dùng chọn từ bàn phím. Server sẽ tự động gửi trả danh sách các nickname hiện đang đăng nhập. Client sẽ
đợi lệnh từ người dùng và gửi câu thoại đến một nickname cụ thể theo khuôn dạng dữ liệu như trên. Client
cũng sẽ tự động hiện các câu thoại nhận được từ nickname khác hoặc danh sách các nickname (nếu có thay
đổi) từ server.
Câu 1: Viết chương trình console ChatClient kết nối với server theo giao thức trên. Sử dụng mô hình
blocking để gửi nhận dữ liệu.
Câu 2: Viết chương trình console ChatServer để tiếp nhận các client theo giao thức trên. Sử dụng mô hình
blocking để gửi nhận dữ liệu.
Bộ môn KTMT
ĐỀ THI MÔN: LẬP TRÌNH MẠNG
HỌ VÀ TÊN:………………………………………….…… SHSH: …………….…..…. LỚP: ……..……
STT
Thời gian làm bài: 90 phút
Không được sử dụng tài liệu
Ngày thi: 1/4/2014
ĐỀ
2
Một giao thức chat đơn giản chạy ở cổng TCP 8888 và được mô tả bằng các gói tin gửi nhận giữa client và
server có cấu trúc như sau:
typedef struct {
int iType;
int iLength;
char szNickname[32];
char bData[1024];
}
Trong đó:
iType là loại gói tin. Có thể nhận một trong các giá trị sau:
o iType = 0: Đăng nhập, được gửi từ client => server, khi đó iLength = 0 và szNickname là
nickname client muốn đăng kí với server. Giả sử việc đăng nhập không cần mật khẩu và server
sẽ luôn luôn chấp nhận bất kì nickname nào, kể cả nickname đã sử dụng trước đó.
o iType = 1: Chat, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì iLength là chiều dài câu thoại, szNickname là nickname đích sẽ nhận câu thoại. Server
nhận được gói tin này sẽ chỉnh sửa lại trường szNickname của gói tin và chuyển tiếp đến client.
Client khi nhận được gói tin này sẽ hiểu szNickname là nickname gửi.
o iType = 2: List, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì có nghĩa là client muốn lấy danh sách các nickname đang đăng nhập. Ilength lúc đó
bằng 0 và bData không có ý nghĩa gì. Nếu được gửi từ server => client nghĩa là server thông báo
danh sách các nickname đang đăng nhập, iLength sẽ là chiều dài dữ liệu phần bData, bData sẽ
chứa danh sách các nickname, mỗi nickname chiếm chính xác 32 kí tự (mặc dù thực tế có thể ít
hơn, khi đó các kí tự NULL sẽ được thêm vào cho đủ 32 kí tự). Ví dụ có 3 nickname thì iLength =
96 và bData[0] chứa nickname thứ 1, bData[32] chứa nickname thứ 2, và bData[64] chứa
nickname thứ 3. Server có thể chủ động gửi gói tin này đến tất cả các client mỗi khi có một client
vừa đăng nhập hoặc đăng xuất.
iLength: Chiều dài dữ liệu phần bData, có thể dài tối đa 1024 kí tự.
szNickname: Mang nhiều ý nghĩa, tùy theo trường iType: Nickname muốn đăng nhập, nickname muốn
gửi tin nhắn hoặc nickname vừa gửi tin nhắn.
bData: dữ liệu của gói tin, mang nhiều ý nghĩa tùy theo trường iType.
Ban đầu khi client muốn tham gia vào hệ thống, nó phải gửi gói tin để đăng nhập với nickname do người
dùng chọn từ bàn phím. Server sẽ tự động gửi trả danh sách các nickname hiện đang đăng nhập. Client sẽ
đợi lệnh từ người dùng và gửi câu thoại đến một nickname cụ thể theo khuôn dạng dữ liệu như trên. Client
cũng sẽ tự động hiện các câu thoại nhận được từ nickname khác hoặc danh sách các nickname (nếu có thay
đổi) từ server.
Câu 1: Viết chương trình console ChatClient kết nối với server theo giao thức trên. Sử dụng mô hình select
để gửi nhận dữ liệu.
Câu 2: Viết chương trình console ChatServer để tiếp nhận các client theo giao thức trên. Sử dụng mô hình
select để gửi nhận dữ liệu.
Bộ môn KTMT
ĐỀ THI MÔN: LẬP TRÌNH MẠNG
HỌ VÀ TÊN:………………………………………….…… SHSH: …………….…..…. LỚP: ……..……
STT
Thời gian làm bài: 90 phút
Không được sử dụng tài liệu
Ngày thi: 1/4/2014
ĐỀ
3
Một giao thức chat đơn giản chạy ở cổng TCP 8888 và được mô tả bằng các gói tin gửi nhận giữa client và
server có cấu trúc như sau:
typedef struct {
int iType;
int iLength;
char szNickname[32];
char bData[1024];
}
Trong đó:
iType là loại gói tin. Có thể nhận một trong các giá trị sau:
o iType = 0: Đăng nhập, được gửi từ client => server, khi đó iLength = 0 và szNickname là
nickname client muốn đăng kí với server. Giả sử việc đăng nhập không cần mật khẩu và server
sẽ luôn luôn chấp nhận bất kì nickname nào, kể cả nickname đã sử dụng trước đó.
o iType = 1: Chat, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì iLength là chiều dài câu thoại, szNickname là nickname đích sẽ nhận câu thoại. Server
nhận được gói tin này sẽ chỉnh sửa lại trường szNickname của gói tin và chuyển tiếp đến client.
Client khi nhận được gói tin này sẽ hiểu szNickname là nickname gửi.
o iType = 2: List, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì có nghĩa là client muốn lấy danh sách các nickname đang đăng nhập. iLength lúc đó
bằng 0 và bData không có ý nghĩa gì. Nếu được gửi từ server => client nghĩa là server thông báo
danh sách các nickname đang đăng nhập, iLength sẽ là chiều dài dữ liệu phần bData, bData sẽ
chứa danh sách các nickname, mỗi nickname chiếm chính xác 32 kí tự (mặc dù thực tế có thể ít
hơn, khi đó các kí tự NULL sẽ được thêm vào cho đủ 32 kí tự). Ví dụ có 3 nickname thì iLength =
96 và bData[0] chứa nickname thứ 1, bData[32] chứa nickname thứ 2, và bData[64] chứa
nickname thứ 3. Server có thể chủ động gửi gói tin này đến tất cả các client mỗi khi có một client
vừa đăng nhập hoặc đăng xuất.
iLength: Chiều dài dữ liệu phần bData, có thể dài tối đa 1024 kí tự.
szNickname: Mang nhiều ý nghĩa, tùy theo trường iType: Nickname muốn đăng nhập, nickname muốn
gửi tin nhắn hoặc nickname vừa gửi tin nhắn.
bData: dữ liệu của gói tin, mang nhiều ý nghĩa tùy theo trường iType.
Ban đầu khi client muốn tham gia vào hệ thống, nó phải gửi gói tin để đăng nhập với nickname do người
dùng chọn từ bàn phím. Server sẽ tự động gửi trả danh sách các nickname hiện đang đăng nhập. Client sẽ
đợi lệnh từ người dùng và gửi câu thoại đến một nickname cụ thể theo khuôn dạng dữ liệu như trên. Client
cũng sẽ tự động hiện các câu thoại nhận được từ nickname khác hoặc danh sách các nickname (nếu có thay
đổi) từ server.
Câu 1: Viết chương trình console ChatClient kết nối với server theo giao thức trên. Sử dụng mô hình
WSAEventSelect để gửi nhận dữ liệu.
Câu 2: Viết chương trình console ChatServer để tiếp nhận các client theo giao thức trên. Sử dụng mô hình
WSAEventSelect để gửi nhận dữ liệu.
Bộ môn KTMT
ĐỀ THI MÔN: LẬP TRÌNH MẠNG
HỌ VÀ TÊN:………………………………………….…… SHSH: …………….…..…. LỚP: ……..……
STT
Thời gian làm bài: 90 phút
Không được sử dụng tài liệu
Ngày thi: 1/4/2014
ĐỀ
4
Một giao thức chat đơn giản chạy ở cổng TCP 8888 và được mô tả bằng các gói tin gửi nhận giữa client và
server có cấu trúc như sau:
typedef struct {
int iType;
int iLength;
char szNickname[32];
char bData[1024];
}
Trong đó:
iType là loại gói tin. Có thể nhận một trong các giá trị sau:
o iType = 0: Đăng nhập, được gửi từ client => server, khi đó iLength = 0 và szNickname là
nickname client muốn đăng kí với server. Giả sử việc đăng nhập không cần mật khẩu và server
sẽ luôn luôn chấp nhận bất kì nickname nào, kể cả nickname đã sử dụng trước đó.
o iType = 1: Chat, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì iLength là chiều dài câu thoại, szNickname là nickname đích sẽ nhận câu thoại. Server
nhận được gói tin này sẽ chỉnh sửa lại trường szNickname của gói tin và chuyển tiếp đến client.
Client khi nhận được gói tin này sẽ hiểu szNickname là nickname gửi.
o iType = 2: List, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì có nghĩa là client muốn lấy danh sách các nickname đang đăng nhập. Ilength lúc đó
bằng 0 và bData không có ý nghĩa gì. Nếu được gửi từ server => client nghĩa là server thông báo
danh sách các nickname đang đăng nhập, iLength sẽ là chiều dài dữ liệu phần bData, bData sẽ
chứa danh sách các nickname, mỗi nickname chiếm chính xác 32 kí tự (mặc dù thực tế có thể ít
hơn, khi đó các kí tự NULL sẽ được thêm vào cho đủ 32 kí tự). Ví dụ có 3 nickname thì iLength =
96 và bData[0] chứa nickname thứ 1, bData[32] chứa nickname thứ 2, và bData[64] chứa
nickname thứ 3. Server có thể chủ động gửi gói tin này đến tất cả các client mỗi khi có một client
vừa đăng nhập hoặc đăng xuất.
iLength: Chiều dài dữ liệu phần bData, có thể dài tối đa 1024 kí tự.
szNickname: Mang nhiều ý nghĩa, tùy theo trường iType: Nickname muốn đăng nhập, nickname muốn
gửi tin nhắn hoặc nickname vừa gửi tin nhắn.
bData: dữ liệu của gói tin, mang nhiều ý nghĩa tùy theo trường iType.
Ban đầu khi client muốn tham gia vào hệ thống, nó phải gửi gói tin để đăng nhập với nickname do người
dùng chọn từ bàn phím. Server sẽ tự động gửi trả danh sách các nickname hiện đang đăng nhập. Client sẽ
đợi lệnh từ người dùng và gửi câu thoại đến một nickname cụ thể theo khuôn dạng dữ liệu như trên. Client
cũng sẽ tự động hiện các câu thoại nhận được từ nickname khác hoặc danh sách các nickname (nếu có thay
đổi) từ server.
Câu 1: Viết chương trình console ChatClient kết nối với server theo giao thức trên. Sử dụng mô hình
Overlapped Event để gửi nhận dữ liệu.
Câu 2: Viết chương trình console ChatServer để tiếp nhận các client theo giao thức trên. Sử dụng mô hình
Overlapped Event để gửi nhận dữ liệu.
Bộ môn KTMT
ĐỀ THI MÔN: LẬP TRÌNH MẠNG
HỌ VÀ TÊN:………………………………………….…… SHSH: …………….…..…. LỚP: ……..……
STT
Thời gian làm bài: 90 phút
Không được sử dụng tài liệu
Ngày thi: 1/4/2014
ĐỀ
5
Một giao thức chat đơn giản chạy ở cổng TCP 8888 và được mô tả bằng các gói tin gửi nhận giữa client và
server có cấu trúc như sau:
typedef struct {
int iType;
int iLength;
char szNickname[32];
char bData[1024];
}
Trong đó:
iType là loại gói tin. Có thể nhận một trong các giá trị sau:
o iType = 0: Đăng nhập, được gửi từ client => server, khi đó iLength = 0 và szNickname là
nickname client muốn đăng kí với server. Giả sử việc đăng nhập không cần mật khẩu và server
sẽ luôn luôn chấp nhận bất kì nickname nào, kể cả nickname đã sử dụng trước đó.
o iType = 1: Chat, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì iLength là chiều dài câu thoại, szNickname là nickname đích sẽ nhận câu thoại. Server
nhận được gói tin này sẽ chỉnh sửa lại trường szNickname của gói tin và chuyển tiếp đến client.
Client khi nhận được gói tin này sẽ hiểu szNickname là nickname gửi.
o iType = 2: List, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì có nghĩa là client muốn lấy danh sách các nickname đang đăng nhập. Ilength lúc đó
bằng 0 và bData không có ý nghĩa gì. Nếu được gửi từ server => client nghĩa là server thông báo
danh sách các nickname đang đăng nhập, iLength sẽ là chiều dài dữ liệu phần bData, bData sẽ
chứa danh sách các nickname, mỗi nickname chiếm chính xác 32 kí tự (mặc dù thực tế có thể ít
hơn, khi đó các kí tự NULL sẽ được thêm vào cho đủ 32 kí tự). Ví dụ có 3 nickname thì iLength =
96 và bData[0] chứa nickname thứ 1, bData[32] chứa nickname thứ 2, và bData[64] chứa
nickname thứ 3. Server có thể chủ động gửi gói tin này đến tất cả các client mỗi khi có một client
vừa đăng nhập hoặc đăng xuất.
iLength: Chiều dài dữ liệu phần bData, có thể dài tối đa 1024 kí tự.
szNickname: Mang nhiều ý nghĩa, tùy theo trường iType: Nickname muốn đăng nhập, nickname muốn
gửi tin nhắn hoặc nickname vừa gửi tin nhắn.
bData: dữ liệu của gói tin, mang nhiều ý nghĩa tùy theo trường iType.
Ban đầu khi client muốn tham gia vào hệ thống, nó phải gửi gói tin để đăng nhập với nickname do người
dùng chọn từ bàn phím. Server sẽ tự động gửi trả danh sách các nickname hiện đang đăng nhập. Client sẽ
đợi lệnh từ người dùng và gửi câu thoại đến một nickname cụ thể theo khuôn dạng dữ liệu như trên. Client
cũng sẽ tự động hiện các câu thoại nhận được từ nickname khác hoặc danh sách các nickname (nếu có thay
đổi) từ server.
Câu 1: Viết chương trình console ChatClient kết nối với server theo giao thức trên. Sử dụng mô hình
Overlapped Completion Routine để gửi nhận dữ liệu.
Câu 2: Viết chương trình console ChatServer để tiếp nhận các client theo giao thức trên. Sử dụng mô hình
Overlapped Completion Routine để gửi nhận dữ liệu.
Ngân hàng câu hỏi thi Lập Trình Mạng – Lương Ánh Hoàng
1. Thư viện liên kết động của Windows Socket có tên là:
a. WinSock.DLL
b. WinSock2.DLL
c. WS2.DLL
d. WS2_32.DLL
2. Để có thể sử dụng thư viện Windows Socket, tệp tiêu đề cần khai báo là:
a. Winsock.h
b. Winsock2.h
c. Ws2_32.h
d. Ws2.h
3. Để có thể sử dụng dụng thư viện Windows Socket, tệp thư viện cần khai báo cho quá trình liên kết là.
a. Winsock.lib
b. WS2_32.LIB
c. WS2_32.DLL
d. Winsock2.dll
4. Công cụ chuẩn đoán mạng dùng để hiển thị các kết nối hiện có trên máy tính là
a. Wireshark
b. TCPView
c. Netcat
d. Tất cả các công cụ trên
5. Công cụ dùng để theo dõi tài nguyên sử dụng của máy tính trên hệ điều hành Windows là
a. Task Manager
b. Resource Monitor
c. Wireshark
d. Phương án a và b.
6. Công cụ dùng để bắt các gói tin gửi ra và vào một giao diện mạng của máy tính là
a. Netcat
b. Network Monitor
c. Wireshark
d. b và c.
7. Công cụ đa năng, vừa có thể đóng vai trò client, vừa server, chạy trên giao thức TCP, UDP là.
a. Netcat
b. TCPDump
c. Netstat
d. Network Monitor
8. Nếu cần phải viết một ứng dụng cần tính đáp ứng nhanh và chấp nhận sai sót. Giao thức lựa chọn sẽ là
a. TCP
b. IP
c. ICMP
d. UDP
9. Dịch vụ phân giải tên miền chạy ở tầng nào trong các tầng sau đây
a. Application
b. Transport
c. Internetwork
d. Datalink
10. Giao thức nào được sử dụng để chia sẻ một địa chỉ toàn cục cho một nhóm các máy tính trong mạng LAN.
a. VLAN
b. MAC
c. NAT
d. Không đáp án nào đúng
11. Trong một mạng máy tính được chia sẻ chung một địa chỉ IP toàn cục. Thiết lập nào sau đây sẽ cho phép
một máy tính từ Internet chủ động kết nối đến một máy chủ trong mạng.
a. DMZ
b. Virtual Server
c. Port Forwarding
d. Cả ba phương án trên.
12. Công cụ nào sử dụng để kiểm tra hoạt động của một máy chủ phân giải tên miền
a. Ping
b. Nslookup
c. Netstat
d. Ipconfig
13. Nếu cần phát triển thêm trình điều khiển cho một loại thiết bị mới. Ứng dụng sẽ phải viết ở tầng nào của
Windows Socket
a. Application
b. Provider
c. Transport Protocol
d. Không tầng nào đúng
14. Nếu cần phải thiết kế một giao thức mới, ứng dụng sẽ phải tích hợp vào tầng nào của Windows Socket API
a. Application
b. Provider
c. Transport Protocol
d. Không tầng nào đúng.
15. Trình điều khiển cho một thiết bị mạng chạy ở chế độ
a. User Mode
b. Kernel Mode
c. System Mode
d. Không phương án nào đúng.
16. Biên của thông điệp trong các giao thức hướng dòng có được bảo toàn hay không ?
a.
b. Không
c. Tùy từng trường hợp, nếu được tổ chức
hợp lý.
17. Hàm nào sau đây thực hiện công việc khởi tạo Windows Socket
a. WSStartup
b. WinsockStartup
c. SocketStartup
d. WSAStartup
18. WSADATA là cấu trúc dùng để
a. Truyền thông tin về phiên bản WinSock
mà ứng dụng muốn khởi tạo
b. Nhận thông tin về phiên bản WinSock
có trên hệ thống.
c. Cả hai đáp án đều sai.
19. Hàm nào sau đây sử dụng để giải phóng Windows Socket API.
a. WSACleanup
b. WSCleanup
c. Cleanup
d. Phương án khác:…
20. Để lấy mã lỗi của thao tác ngay trước đó. Hàm nào sau đây sẽ được sử dụng
a. GetLastError
b. WSAGetError
c. WSAGetLastError
d. WSALastError
21. Đoạn chương trình sau thực hiện kết nối đến một server, điền vào vị trí <A>, <B>, <C> các lệnh còn thiếu.
ret = connect(s, (sockaddr*)&serverAddr,sizeof(serverAddr));
if (ret ==SOCKET_ERROR) {
printf(“Loi ket noi: %d”, <A>);
<B>;
<C>;
};
a. <A>: GetLastError, <B>: closesocket (s),
<C>: WSACleanup().
b. <A>: WSAGetLastError(), <B> close(s),
<C>: Cleanup().
c. <A>: WSALastError(), <B>:
closesocket(s), <C>: để trống.
d. <A>: WSAGetLastError(), <B>:
closesocket(s), <C>: WSACleanup().
22. Trong Windows Socket, với các hàm không có tiền tố WSA thì mã lỗi trả về là 0 có nghĩa là:
a. Thành công
b. Thất bại
c. Tùy trường hợp
23. Lệnh nào sau đây dùng để tạo một socket TCP
a. socket(AF_INET,SOCK_STREAM,IPPROT
O_TCP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_
TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROT
O_UDP).
d. socket(AF_INET,SOCKSTREAM,IPPROT
OTCP).
24. Lệnh nào sau đây dùng để tạo một socket UDP
a. socket(AF_INET,SOCK_UDP,
IPPROTO_TCP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_
TCP).
c. socket(AF_INET,SOCK_STREAM,IPPROT
O_UDP).
d. socket(AF_INET, SOCK_DGRAM,
IPPROTO_UDP).
25. Cấu trúc nào được sử dụng để khai báo địa chỉ socket internet:
a. sock_addr
b. sockaddr
c. sockaddr_in
d. sock_addr_in
26. Các giá trị lớn hơn 01 byte trong cấu trúc lưu trữ địa chỉ của socket được tổ chức theo kiểu:
a. Đầu to
b. Đầu nhỏ
c. Tùy trường hợp
27. Để chuyển đổi một xâu sang địa chỉ IP, lệnh nào sau đây là đúng
a. inet_ntoa(“192.168.1.1”);
b. inet_aton(“192.168.1.1”);
c. inet_addr(“192.168.1.1”);
d. inet_stoi(“192.168.1.1”);
28. Để chuyển đổi một địa chỉ IP lưu trong biến serverAddr lưu trữ địa chỉ socket sang dạng xâu ký tự, lệnh nào
sau đây là đúng
a. inet_ntos(serverAddr.sin_addr);
b. inet_ntoa(serverAddr.s_addr);
c. inet_itos(serverAddr.sin_addr);
d. inet_ntoa(serverAddr.sin_addr);
29. Để chuyển đổi giá trị cổng từ đầu nhỏ sang đầu to, lệnh nào sau đây sẽ được sử dụng
a. ntohl
b. ntohs
c. htonl
d. htons
30. Để thực hiện phân giải tên miền bằng WinSock, cần bổ sung tệp tiêu đề nào
a. Winsock2.h
b. Ws2_32.h
c. Ws2ip.h
d. Ws2tcpip.h
31. Để thực hiện phân giải tên miền bằng WinSock, hàm nào sau đây có thể sử dụng
a. getaddrinfo
b. gethostinfo
c. getpeerinfo
d. Cả ba hàm trên
32. Kết quả trả về của thao tác phân giải tên miền là <A> và phải giải phóng bằng hàm/toán tử <B>
a. <A>: Mảng, <B> delete b. <A>: Danh sách liên kết đơn, <B> free
c. <A>: Danh sách liên kết kép, <B>
freeaddrinfo
d. <A>: Danh sách liên kết đơn, <B>
freeaddrinfo
33. Trường nào sau đây trong cấu trúc addrinfo chứa thông tin về địa chỉ socket phân giải được.
a. ai_addr.
b. sock_addr.
c. addr.
d. in_addr.
34. Trong trường hợp nào sau đây hàm bind sẽ thất bại
a. Tường lửa chặn.
b. Đã có ứng dụng khác mở sử dụng cổng
trên.
c. Socket không hợp lệ.
d. Cả ba trường hợp trên.
35. Lệnh nào sau đây sẽ gắn một socket s vào giao diện mạng bất kỳ được mô tả trong cấu trúc địa chỉ
serverAddr.
a. bind(s, (sockaddr_in*)&serverAddr,
sizeof(serverAddr));
b. bind(s, (sockaddr*)serverAddr,
sizeof(serverAddr));
c. bind(s, (sockaddr*)&serverAddr,
sizeof(sockaddr_in));
d. bind(s, (sockaddr*)&serverAddr,
sizeof(serverAddr));
36. Lệnh nào sau đây sẽ gán giá trị cổng 8080 cho cấu trúc địa chỉ serverAddr.
a. serverAddr.sin_port = 8080.
b. serverAddr.s_port = 8080.
c. serverAddr.sin_port = htonl(8080).
d. serverAddr.sin_port = htons(8080).
37. Đoạn chương trình sau sẽ thực hiện chấp nhận kết nối từ client. Điền vào chỗ trống các phương án cần thiết
SOCKET server,client;
sockaddr_in clientAddr;
int len;
len = <A>;
client = accept(server,<B>, <C>);
a. <A> = 0, <B> = clientAddr, <C> = len.
b. <A> = sizeof(client), <B> = &clientAddr, <C>
=len.
c. <A> = 0, <B> = (sockaddr*)&clientAddr,
<C> = &len.
d. <A> = sizeof(clientAddr), <B> =
(sockaddr*)&clientAddr,&len.
38. Đoạn chương trình sau thực hiện đọc dữ liệu từ bàn phím và gửi đi qua socket s. Điền vào chỗ trống những
lệnh còn thiếu.
char str[1024];
int ret = 0;
gets(str);
<A> = send(s,str,<B>,0);
if (<A> <= 0)
{
printf("Loi gui xau!");
<C>;
}
a. <A> = ret, <B> = 1024, <C> = để trống.
b. <A> = ret, <B> = sizeof(str), <C> =
close(s).
c. <A> = str, <B> = strlen(str), <C> =
close(s).
d. <A> = ret, <B> = strlen(str), <C> =
closesocket(s).
39. Trong lời gọi hàm recv(s,buff,1024,0), giá trị 1024 có nghĩa là:
a. Số byte muốn nhận
b. Số byte tối đa muốn nhận.
c. Kích thước bộ đệm.
d. Cả b và c đều đúng.
40. Khi socket hoạt động ở chế độ đồng bộ, mỗi lời gọi hàm sẽ:
a. Chặn tất cả các luồng của chương trình
cho đến khi thao tác vào ra hoàn tất
b. Chặn tất cả các luồng trừ luồng chứa lời
gọi
c. Chỉ chặn luồng chứa lời gọi, các luồng
khác vẫn chạy bình thường.
d. Không chặn luồng nào cả.
41. Khi socket hoạt động ở chế độ bất đồng bộ, mỗi lời gọi hàm sẽ
a. Chặn tất cả các luồng của chương trình
cho đến khi thao tác vào ra hoàn tất
b. Chặn tất cả các luồng trừ luồng chứa lời
gọi
c. Chỉ chặn luồng chứa lời gọi, các luồng
khác vẫn chạy bình thường.
d. Không chặn luồng nào cả.
42. Mặc định socket khi được tạo ra hoạt động ở chế độ <A>, hàm <B> sẽ thay đổi chế độ hoạt động của socket.
a. <A>: đồng bộ, <B>: ioctlsocket.
b. <A>: bất đông bộ, <B>:ioctlsocket.
c. <A>: đồng bộ, <B>: WSAAsyncSelect.
d. Cả a và c đều đúng
43. Khi socket s hoạt động ở chế độ đồng bộ, hàm recv(s,buff,1024,0) sẽ không chặn luồng chứa lời gọi trong
trường hợp nào sau đây.
a. Có dữ liệu từ bộ đệm hệ thống nhưng
không đủ 1024 byte.
b. Có đủ 1024 byte dữ liệu từ bộ đệm hệ
thống.
c. Kết nối bị đóng.
d. Cả ba phương án trên đều đúng.
44. Nếu cần xây dựng server đáp ứng được tối thiểu 10 kết nối, chương trình sẽ cần khai báo bao nhiêu socket
?
a. 11
b. 10
c. 20
d. 21
45. Nếu việc gửi dữ liệu cho các kết nối được tập trung vào trong một luồng, thì mô hình Blocking cần tối thiểu
bao nhiêu luồng để đáp ứng được 100 kết nối.
a. 100
b. 200
c. 201
d. 101
46. Trong mô hình Select, để thăm dò sự kiện kết nối đến server thành công, client cần cho socket vào tập nào
a. readfds
b. writefds
c. exceptfds
d. Cả ba tập đều được.
47. Trong mô hình Select, để thăm dò sự kiện nhận dữ liệu OOB, client cần cho socket vào tập nào
a. readfds
b. writefds
c. exceptfds
d. Cả ba tập đều được.
48. Nếu dùng mô hình Select và thăm dò sự kiện cho 100 kết nối, ứng dụng sẽ cần bao nhiêu luồng ?
a. 100
b. 2
c. 101
d. 1.
49. Trong mô hình Select, socket chạy ở chế độ nào ?
a. Đồng bộ
b. Bất đồng bộ
c. Không xác định
50. Hàm callback WindowProc được gọi trong ngữ cảnh của:
a. Một luồng riêng được hệ thống tạo ra.
b. Luồng chính xử lý giao diện.
c. Luồng phụ do chương trình tạo ra.
d. Phương án khác…
51. Trong các hàm xử lý sự kiện của chương trình có giao diện đồ họa, có nên gọi các hàm đồng bộ của WinSock
?
a. Không, vì sẽ làm việc gửi nhận dữ liệu
của socket bị chậm đi.
b. Không, vì sẽ làm hệ điều hành bị treo.
c. Có, vì không ảnh hưởng gì đến chương
trình.
d. Không, vì sẽ làm giảm khả năng đáp ứng
của chương trình với các sự kiện người
dùng.
52. Trong mô hình WSAEventSelect, giả sử ứng dụng có 10 SOCKET, cần mấy đối tượng WSAEVENT tương
ứng?
a. 10
b. 20
c. 11
d. Số khác…
53. Đối tượng WSAEVENT được tạo ra bởi WSACreateEvent có thuộc tính:
a. Signaled, auto reset
b. Non-signaled, auto reset
c. Signaled, manual reset
d. Non-signaled , manual reset
54. Hàm WSAWaitForMultipleEvent sẽ chặn luồng có lời gọi đến khi
a. Các đối tượng EVENT chuyển sang trạng
thái báo hiệu
b. Hết giờ
c. Các đối tượng EVENT chuyển sang trạng
thái chưa báo hiệu
d. Cả a và b
55. Giả sử s là socket dùng để kết nối đến server khác, lệnh nào sau đây thích hợp nhất.
a. WSAEventSelect(s, event, FD_ACCEPT |
FD_CLOSE);
b. WSAEventSelect(s, event,
FD_CONNECT|
FD_WRITE|FD_READ|FD_CLOSE);
c. WSAEventSelect(s, event, FD_ACCEPT|
FD_CONNECT);
d. WSAEventSelect(s, event,
FD_CONNECT| FD_CLOSE);
56. Những hàm nào sau đây có thể sử dụng mô hình vào ra Overlapped
a. WSAConnect
b. accept
c. WSARecv
d. a và c
57. Có thể sử dụng cùng một đối tượng EVENT cho hai socket khác nhau trong mô hình Overlapped được
không
a. b. Không
58. Trong mô hình vào ra Overlapped, completion routine sẽ được gọi bởi:
a. Chương trình trong cùng luồng có yêu cầu vào ra.
b. Chương trình trong một luồng khác với luồng có yêu cầu vào ra.
c. Hệ điều hành trong luồng khác với luồng có yêu cầu vào ra.
d. Hệ điều hành trong luồng cùng với luồng có yêu cầu vào ra.
59. Alertable là trạng thái:
a. Đang ngủ và sẵn sàng thực hiện hàm callback từ hệ điều hành
b. Đang thực thi và sẵn sàng thực hiện hàm callback từ hệ điều hành
c. Đang ngủ và chưa sẵn sàng thực hiện hàm callback từ hệ điều hành
d. Đang thực thi và chưa sẵn sàng thực hiện hàm callback từ hệ điều hành
60. Hàm nào sau đây có thể đưa luồng về trạng thái alertable
a. SleepEx
b. WSAConnect
c. Sleep
d. Cả a và c
61. CSocket là lớp
a. Cơ sở của CAsyncSocket
b. Dẫn xuất của CAsyncSocket
c. Kế thừa của CAsyncSocket
d. Không có quan hệ gì với CAsyncSocket
62. Các phương thức của CSocket đều hoạt động
a. Đồng bộ b. Bất đồng bộ
63. Các phương thức của CAsyncSocket đều hoạt động
a. Đồng bộ b. Bất đồng bộ
64. Luồng A tạo đối tượng m có kiểu CSocket. Trong luồng B, lệnh nào sau đây là hợp lệ
a. m.Connect(“127.0.0.1”,8888);
b. m.Close();
c. m.ShutDown();
d. Cả ba đều không hợp lệ.
65. Để xử lý sự kiện cho CAsyncSocket cần phải
a. Gắn đối tượng vào một biến có kiểu WSAEVENT.
b. Gắn đối tượng vào một cửa sổ qua hàm WSAAsyncSelect.
c. Truyền đối số là một hàm callback cho các thao tác vào ra.
d. Kế thừa ra một lớp mới và viết các phương thức chồng.
Đoạn chương trình sau sử dụng trong chương trình chat Voice xử lý việc nhận dữ liệu từ server, hãy điền
vào chỗ trống những lệnh cần thiết. (câu 66 đến 72)
enum PACKET_TYPE
{
PACKET_TYPE_TEXT,
PACKET_TYPE_VOICE,
PACKET_TYPE_IMAGE
};
struct Packet
{
char type;
int len;
char data[65536];
};
int total = 0;
int len = 0;
SOCKET s;
Packet p;
recv(s,&p.type,<A> ,MSG_WAITALL);
recv(s,(char*)&p.len,<B>,MSG_WAITALL);
switch (p.type)
{
case <C>:
while (total<p.len)
{
len = recv(s,<D>,<E>,0);
if (len<=0) break;
total+=<F>;
};
p.data[total] = <G>;
printf("Text:%s",p.data);
}
66. Giá trị thích hợp cho <A> là
a. 1 b. 2 c. 4 d. sizeof(p)
67. Giá trị thích hợp cho <B> là
a. 1
b. 2
c. 4
d. sizeof(Packet)
68. Giá trị thích hợp cho <C> là
a. PACKET_TYPE_VOICE
b. PACKET_TYPE_IMAGE
c. PACKET_TYPE_TEXT
d. Giá trị khác…
69. Giá trị thích hợp cho <D> là
a. &p
b. p.data
c. p.data+p.len
d. Phương án khác…
70. Giá trị thích hợp cho <E> là
a. p.len
b. p.len – total
c. total
d. 65536
71. Giá trị thích hợp cho <F> là
a. len
b. pk.len
c. sizeof(Packet)
d. 4
72. Giá trị thích hợp cho <G> là
a. 0xFF
b. 0
c. 1
d. Phương án khác…
Đoạn chương trình sau đây thực hiện nhận dữ liệu từ một socket UDP và kiểm tra lại checksum, điền vào
chỗ trống những lệnh thích hợp (câu 73 đến 79)
struct Packet
{
int offset;
int len;
unsigned short checksum; // XOR
char data[1024];
};
Packet p;
SOCKADDR_IN from;
int fromLen = <A>;
int total = 0, len;
unsigned short tmpchecksum = 0;
SOCKET s;
memset(&p,0,sizeof(p));
len = recvfrom(s,(char*)&p,10,0,<E>,&fromLen);
while (<B>)
{
len = recvfrom(s,<C>,<D>,0,<E>,&fromLen);
if (len <=0 ) break;
total += len;
};
for (int i=0;i<(p.len+1)/2;i++)
tmpchecksum = tmpchecksum <F> *((unsigned short*)(&p.data[<G>]));
if (tmpchecksum!=p.checksum)
printf("Goi tin bi loi!");
73. Giá trị thích hợp cho <A> là
a. 1024
b. sizeof(p)
c. sizeof(from)
d. Phương án khác…
74. Giá trị thích hợp cho <B> là
a. true
b. 1
c. total >= p.len
d. total < p.len
75. Giá trị thích hợp cho <C> là
a. p.data + len
b. p.data
c. p.data + (p.len – total)
d. Cả ba đều sai
76. Giá trị thích hợp cho <D> là
a. 1024
b. p.len – total
c. p.len + total
d. p.len
77. Giá trị thích hợp cho <E> là
a. &from
b. sizeof(from)
c. (sockaddr*)from
d. (sockaddr*)&from
78. Giá trị thích hợp cho <F> là
a. ^
b. |
c. &
d. ~
79. Giá trị thích hợp cho <G> là
a. i*2
b. i*3
c. i*4
d. i
80. Đoạn chương trình server sau quản lý các kết nối của client dưới dạng danh sách liên kết kép. Điền vào chỗ
trống các lệnh thích hợp
struct Connection
{
SOCKADDR_IN addr;
SOCKET s;
HANDLE hThread;
Connection * pNext;
Connection * pPrev;
};
Connection * pHead = 0,*pCur = 0,*pTmp = 0;
SOCKET listen;
SOCKET c;
SOCKADDR_IN cAddr;
int ret , cAddrLen = sizeof(cAddr);
while (1)
{
<A> = accept(listen,(sockaddr*)&cAddr,<B>);
if (!pHead)
{
pTmp = pCur = pHead = <C>;
memset(pTmp,0,sizeof(Connection));
}
else
{
pTmp = <C>;
memset(pTmp,0,sizeof(Connection));
pCur->pNext =<D>;
pTmp->pPrev = <E>;
pCur = pTmp;
};
pTmp->s = <F>;
pTmp->hThread = CreateThread(0,0,ReceiverThread,<G>,0,0);
};
Giá trị thích hợp cho <A> là
a. ret
b. c
c. Để trống
d. pHead
81. Giá trị thích hợp cho <B> là
a. sizeof(cAddr)
b. cAddrLen
c. &cAddrLen
d. &ret
82. Giá trị thích hợp cho <C> là
a. new Connection
b. new SOCKET
c. 0
d. Phương án khác…
83. Giá trị thích hơp cho <D> là
a. pTmp
b. pCur
c. pHead
d. pHead->pNext
84. Giá trị thích hợp cho <E> là
a. pHead
b. pCur
c. pTmp
d. pCur->pNext
85. Giá trị thích hợp cho <F> là
a. c
b. listen
c. 0
d. Phương án khác…
86. Giá trị thích hợp cho <G> là
a. pHead
b. pCur
c. pTmp
d. 0
87. Đoạn chương trình sau thực hiện phân giải tên miền nhập từ bàn phím với cổng 8888 sau đó hiện các kết
quả ra màn hình, điền vào chỗ trống các lệnh thích hợp.
addrinfo * info,*pCur;
char host[1024];
SOCKADDR_IN addr;
int ret;
printf("Nhap dia chi server:");
gets(host);
ret = getaddrinfo(host,<A>,0,<B>);
if (ret)
{
printf("Khong tim thay server");
return 0;
};
pCur = info;
while (pCur)
{
memcpy(&addr,<C>,pCur->ai_addrlen);
printf("%s\n",<D>);
pCur = pCur->ai_next;
};
freeaddrinfo(pCur);
Giá trị thích hợp cho <A> là
a. “8888”
b. 8888
c. htons(8888)
d. ntohs(8888);
88. Giá trị thích hợp cho <B> là
a. info
b. &info
c. 0
d. &addr
89. Giá trị thích hợp cho <C> là
a. info->ai_addr
b. pCur
c. info
d. pCur->ai_addr
90. Giá trị thích hợp cho <D> là
a. inet_addr(addr.sin_addr)
b. inet_ntoa(pCur)
c. inet_ntoa(pCur->sin_addr)
d. inet_ntoa(addr.sin_addr)
91. Đoạn chương trình sau minh họa việc xử lý lệnh của HTTP server để phân tách URL mà client yêu cầu.
Server sẽ dừng việc nhận dữ liệu cho đến khi gặp cặp ký tự “\r\n\r\n”. Điền vào chỗ trống các lệnh thích
hợp
SOCKET s;
char command[1024];
char url[1024];
int len = 0, ret;
char *pos;
while (1)
{
ret = recv(s, <A> , 1 , MSG_WAITALL);
if (ret<=0) break;
len += ret;
if ((command[<B>-1]=='\n')&&(command[<B>-2]=='\r')&&
(command[<B>-4]=='\n')&&(command[<B>-3]=='\r'))
break;
};
command[len] = 0;
if (strstr(command,"GET ")==0)
printf("Unknown command");
pos = strstr(command,"HTTP/1.0");
if (pos==0)
pos = strstr(command,"HTTP/1.1");
if (pos <C> 0)
{
printf("Invalid format");
return 0;
};
strncpy(url,<D>,pos-command-4);
url[<E>] = 0;
Giá trị thích hợp cho <A> là
a. command
b. command+len
c. command+1
d. &command
92. Giá trị thích hợp cho <B> là
a. ret
b. len
c. pos
d. len-1
93. Giá trị thích hợp cho <C> là
a. ==
b. >
c. <
d. <=
94. Giá trị thích hợp cho <D> là
a. command
b. command+4
c. command-4
d. &command+4
95. Giá trị thích hợp cho <E> là
a. pos
b. pos-command
c. pos-command+4
d. pos-command-4
ĐỀ THI KẾT THÚC HỌC PHẦN - 20122
Môn học: Lập trình Mạng - Mã học phần: IT4060
Thời gian làm bài: 60 phút - Sinh viên được sử dụng tài liệu
(Đề thi chỉ có 1 câu)
Câu 1: Sử dụng ngôn ngữ lập trình C/C++ hãy viết chương trình Server thực hiện các
công việc sau:
1.
Tạo socket, và đợi kết nối
2. Chấp nhận kết nối từ client
3. Nhận lệnh từ client và xử lý:
a. Nếu client gửi USER:<Tên người dùng> thì kiểm tra tên người dùng có hay
không, nếu không thì gửi lại cho client thông báo “No user found”, nếu có thì gửi cho
người dùng thông báo “OK
b. Nếu client gửi PASS:<Mật khẩu> thì kiểm tra
i. Nếu client chưa gửi USER trước đó thì gửi lại cho client thông báo “Please
send USER first:
ii. Nếu client đã gửi USER và mật khẩu đúng với user đã gửi thì gửi lại cho
client thông báo “OK
iii. Nếu client đã gửi USER và mật khẩu sai thì gửi lại cho client thông báo
Invalid Password
Giả định rằng tại server có một file text data.txt chứa thông tin về user và password,
mỗi cập trên một dòng.
| 1/32

Preview text:

ĐỀ THI MÔN LẬP TRÌNH MẠNG 515
Thời gian: 60 phút – Không được phép dùng tài liệu
Điền trực tiếp kết quả vào phần trả lời trắc nghiệm
PHẦN TRẢ LỜI TRẮC NGHIỆM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 PHẦN CÂU HỎI
1. Thư viện liên kết động của Windows Socket có tên là: a. WinSock.DLL c. WS2.DLL b. WinSock2.DLL d. WS2_32.DL
2. Để có thể sử dụng thư viện Windows Socket, tệp tiêu đề cần khai báo là: a. Winsock.h c. Ws2_32.h b. Winsock2.h d. Ws2.h
3. Công cụ chuẩn đoán mạng dùng để hiển thị các kết nối hiện có trên máy tính là a. Wireshark c. Netcat b. TCPView d. Tất cả
4. Công cụ dùng để theo dõi tài nguyên sử dụng của máy tính trên hệ điều hành Windows là a. Task Manager c. Wireshark b. ResourceMonitor d. a và b.
5. Công cụ dùng để bắt các gói tin gửi ra và vào một giao diện mạng của máy tính là a. Netcat c. Cain b. Network Monitor d. Cả ba đều sai.
6. Công cụ đa năng, vừa có thể đóng vai trò client, vừa server, chạy trên giao thức TCP, UDP là. a. Netcat c. Netstat b. TCPDump d. Network Monitor
7. Nếu cần phải viết một ứng dụng cần tính đáp ứng nhanh và chấp nhận sai sót. Giao thức lựa chọn sẽ là a. TCP c. ICMP b. IP d. UDP
8. Dịch vụ phân giải tên miền chạy ở tầng nào trong các tầng sau đây a. Application c. Internetwork b. Transport d. Datalink
9. Giao thức nào được sử dụng để chia sẻ một địa chỉ toàn cục cho một nhóm các máy tính trong mạng LAN. a. VLAN c. NAT b. MAC
d. Không đáp án nào đúng
10. Trong một mạng máy tính được chia sẻ chung một địa chỉ IP toàn cục. Thiết lập nào sau đây sẽ cho phép một máy tính từ
Internet chủ động kết nối đến một máy chủ trong mạng. a. DMZ c. Port Forwarding b. Virtual Server
d. Cả ba phương án trên.
11. Công cụ nào sử dụng để kiểm tra hoạt động của một máy chủ phân giải tên miền a. Ping c. Netstat b. Nslookup d. Ipconfig
12. Nếu cần phát triển thêm trình điều khiển cho một loại thiết bị mới. Ứng dụng sẽ phải viết ở tầng nào của Windows Socket a. Application c. Transport Protocol b. Provider d. Không tầng nào đúng
13. Nếu cần phải thiết kế một giao thức mới, ứng dụng sẽ phải tích hợp vào tầng nào của Windows Socket API a. Application c. Transport Protocol b. Provider d. Không tầng nào đúng.
14. Trình điều khiển cho một thiết bị mạng sẽ được chạy ở chế độ a. User Mode c. System Mode b. Kernel Mode
d. Không phương án nào đúng.
15. Biên của thông điệp trong các giao thức hướng dòng có được bảo toàn hay không ? a. Có b. Không
c. Tùy từng trường hợp, nếu được tổ chức hợp lý.
16. Hàm nào sau đây thực hiện công việc khởi tạo Windows Socket a. WSStartup c. SocketStartup b. WinsockStartup d. WSAStartup
17. WSADATA là cấu trúc dùng để
a. Truyền thông tin về phiên bản WinSock mà ứng dụng muốn khởi tạo
b. Nhận thông tin về phiên bản WinSock có trên hệ thống.
c. Cả hai đáp án đều sai.
18. Hàm nào sau đây sử dụng để giải phóng Windows Socket API. a. WSACleanup c. Cleanup b. WSCleanup d. Phương án khác:…
19. Để lấy mã lỗi của thao tác ngay trước đó. Hàm nào sau đây sẽ được sử dụng a. GetLastError c. WSAGetLastError b. WSAGetError d. WSALastError
20. Đoạn chương trình sau thực hiện kết nối đến một server, điền vào vị trí , , các lệnh còn thiếu.
ret = connect(s, (sockaddr*)&serverAddr,sizeof(serverAddr)); if (ret ==SOCKET_ERROR) {
printf(“Loi ket noi: %d”, ); ; ; };
a. : GetLastError, : closesocket (s), : WSACleanup().
b. : WSAGetLastError(), close(s), : Cleanup().
c. : WSALastError(), : closesocket(s), : để trống.
d. Không phương án nào đúng.
21. Trong Windows Socket, với các hàm không có tiền tố WSA thì mã lỗi trả về là 0 có nghĩa là: a. Thành công b. Thất bại c. Tùy trường hợp
22. Lệnh nào sau đây dùng để tạo một socket TCP
a. socket(AF_INET,SOCK_STREAM,IPPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
d. socket(AF_INET,SOCKSTREAM,IPPROTOTCP).
23. Lệnh nào sau đây dùng để tạo một socket UDP
a. socket(AF_INET,SOCK_UDP, IPPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP). d. Không lệnh nào đúng.
24. Cấu trúc nào được sử dụng để khai báo địa chỉ socket internet: a. sock_addr c. sockaddr_in b. sockaddr d. sock_addr_in
25. Các giá trị lớn hơn 01 byte trong cấu trúc lưu trữ địa chỉ của socket được tổ chức theo kiểu: a. Đầu to c. Tùy trường hợp b. Đầu nhỏ
26. Để chuyển đổi một xâu sang địa chỉ IP, lệnh nào sau đây là đúng
a. inet_ntoa(“192.168.1.1”);
c. inet_addr(“192.168.1.1”);
b. inet_aton(“192.168.1.1”);
d. inet_stoi(“192.168.1.1”);
27. Để chuyển đổi một địa chỉ IP lưu trong biến serverAddr lưu trữ địa chỉ socket sang dạng xâu ký tự, lệnh nào sau đây là
đúng a. inet_ntos(serverAddr.sin_addr);
c. inet_itos(serverAddr.sin_addr);
b. inet_ntoa(serverAddr.s_addr);
d. inet_ntoa(serverAddr.sin_addr);
28. Để chuyển đổi giá trị cổng từ đầu nhỏ sang đầu to, lệnh nào sau đây sẽ được sử dụng a. ntohl c. htonl b. ntohs d. htons
29. Trong lời gọi hàm recv(s,buff,1024,0), giá trị 1024 có nghĩa là: a. Số byte muốn nhận
c. Kích thước bộ đệm.
b. Số byte tối đa muốn nhận.
d. Cả b và c đều đúng.
30. Để thực hiện phân giải tên miền bằng WinSock, cần bổ sung tệp tiêu đề nào a. Winsock2.h c. Ws2ip.h b. Ws2_32.h d. Ws2tcpip.h
Đoạn chương sau nhận về một xâu và gửi trả xâu theo thứ tự ngược lại. Điền vào các vị trí ,,,, các câu lệnh thích hợp: SOCKET s; char c, str[1024]; int i,len; while (1) { len = recv(s,str,1024,0); str[] = 0; for (i=0;i { c = ; str[i] = str[]; str[len-i-1]=; }; send(,str,len,0); }
31. Câu lệnh thích hợp cho là a. len c. 1024 b. i d. 0
32. Câu lệnh thích hợp cho là a. str[0] c. str[len-1] b. str[len] d. str[i]
33. Câu lệnh thích hợp cho là a. len/2 c. len-i b. len-1 d. len-i-1
34. Câu lệnh thích hợp cho là a. c c. str[0] b. str[i] d. str[i-1]
35. Câu lệnh thích hợp cho là a. c c. len b. s d. i
Đoạn chương trình sau đọc nội dung một tệp tin và gửi đi qua kết nối c đã được thành lập.
Điền vào các vị trí , …các câu lệnh/giá trị thích hợp SOCKET c; FILE * fp; char buff[1024]; int len;
fp = fopen("name.txt","rb"); while () {
len = fread(,1,1024,); if (len <=0) break; send(,buff,,0); }; closesocket(c); fclose(fp);
36. Giá trị thích hợp cho là a. fp c. !fp b. feof(fp) d. !feof(fp)
37. Giá trị thích hợp cho a. buff c. c b. fp d. &buff
38. Giá trị thích hợp cho là a. buff c. fp b. &buff d. &fp
39. Giá trị thích hợp cho là a. s c. fp b. &s d. &fp
40. Giá trị thích hợp cho là a. 1024 c. &len b. len d. 0.
ĐỀ THI MÔN LẬP TRÌNH MẠNG 217
Thời gian: 60 phút – Không được phép dùng tài liệu
Điền trực tiếp kết quả vào phần trả lời trắc nghiệm
PHẦN TRẢ LỜI TRẮC NGHIỆM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 PHẦN CÂU HỎI
1. Thư viện liên kết động của Windows Socket có tên là: a. WinSock.DLL c. WS2.DLL b. WinSock2.DLL d. WS2_32.DL
2. Công cụ dùng để theo dõi tài nguyên sử dụng của máy tính trên hệ điều hành Windows là a. Task Manager c. Wireshark b. ResourceMonitor d. a và b.
3. Để có thể sử dụng thư viện Windows Socket, tệp tiêu đề cần khai báo là: a. Winsock.h c. Ws2_32.h b. Winsock2.h d. Ws2.h
4. Để có thể sử dụng dụng thư viện Windows Socket, tệp thư viện cần khai báo cho quá trình liên kết là. a. Winsock.lib c. WS2_32.DLL b. WS2_32.LIB d. Winsock2.dll
5. Nếu cần phải viết một ứng dụng cần tính đáp ứng nhanh và chấp nhận sai sót. Giao thức lựa chọn sẽ là a. TCP c. ICMP b. IP d. UDP
6. Công cụ nào sử dụng để kiểm tra hoạt động của một máy chủ phân giải tên miền a. Ping c. Netstat b. Nslookup d. Ipconfig
7. Công cụ chuẩn đoán mạng dùng để hiển thị các kết nối hiện có trên máy tính là a. Wireshark c. Netcat b. TCPView d. Tất cả
8. Công cụ dùng để bắt các gói tin gửi ra và vào một giao diện mạng của máy tính là a. Netcat c. Cain b. Wireshark d. Cả ba đều sai.
9. Công cụ đa năng, vừa có thể đóng vai trò client, vừa server, chạy trên giao thức TCP, UDP là. a. Netcat c. Netstat b. TCPDump d. Network Monitor
10. Dịch vụ phân giải tên miền chạy ở tầng nào trong các tầng sau đây a. Application c. Internetwork b. Transport d. Datalink
11. Giao thức nào được sử dụng để chia sẻ một địa chỉ toàn cục cho một nhóm các máy tính trong mạng LAN. a. VLAN c. NAT b. MAC
d. Không đáp án nào đúng
12. Trong một mạng máy tính được chia sẻ chung một địa chỉ IP toàn cục. Thiết lập nào sau đây sẽ cho phép một máy tính từ
Internet chủ động kết nối đến một máy chủ trong mạng. a. DMZ c. Port Forwarding b. Virtual Server d. Cả ba phương án trên.
13. Nếu cần phát triển thêm trình điều khiển cho một loại thiết bị mới. Ứng dụng sẽ phải viết ở tầng nào của Windows Socket a. Application c. Transport Protocol b. Provider d. Không tầng nào đúng
14. Nếu cần phải thiết kế một giao thức mới, ứng dụng sẽ phải tích hợp vào tầng nào của Windows Socket API a. Application c. Transport Protocol b. Provider d. Không tầng nào đúng.
15. Trình điều khiển cho một thiết bị mạng sẽ được chạy ở chế độ a. User Mode b. Kernel Mode c. System Mode
d. Không phương án nào đúng.
16. Biên của thông điệp trong các giao thức hướng dòng có được bảo toàn hay không ? a. Có b. Không
c. Tùy từng trường hợp, nếu được tổ chức hợp lý.
17. Hàm nào sau đây thực hiện công việc khởi tạo Windows Socket a. WSStartup c. SocketStartup b. WinsockStartup d. WSAStartup
18. WSADATA là cấu trúc dùng để
a. Truyền thông tin về phiên bản WinSock mà ứng dụng muốn khởi tạo
b. Nhận thông tin về phiên bản WinSock có trên hệ thống.
c. Cả hai đáp án đều sai.
19. Để chuyển đổi giá trị cổng từ đầu nhỏ sang đầu to, lệnh nào sau đây sẽ được sử dụng a. ntohl c. htonl b. ntohs d. htons
20. Hàm nào sau đây sử dụng để giải phóng Windows Socket API. a. WSACleanup c. Cleanup b. WSCleanup d. Phương án khác:…
21. Để lấy mã lỗi của thao tác ngay trước đó. Hàm nào sau đây sẽ được sử dụng a. GetLastError c. WSAGetLastError b. WSAGetError d. WSALastError
22. Để chuyển đổi một địa chỉ IP lưu trong biến serverAddr lưu trữ địa chỉ socket sang dạng xâu ký tự, lệnh nào sau đây là
đúng a. inet_ntos(serverAddr.sin_addr);
c. inet_ntoa(serverAddr.sin_addr);
b. inet_ntoa(serverAddr.s_addr);
d. inet_itos(serverAddr.sin_addr);
23. Lệnh nào sau đây dùng để tạo một socket TCP
a. socket(AF_INET,SOCK_STREAM,IPPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
d. socket(AF_INET,SOCKSTREAM,IPPROTOTCP).
24. Lệnh nào sau đây dùng để tạo một socket UDP
a. socket(AF_INET,SOCK_UDP, IPPROTO_TCP).
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP). d. Không lệnh nào đúng.
25. Đoạn chương trình sau thực hiện kết nối đến một server, điền vào vị trí , , các lệnh còn thiếu.
ret = connect(s, (sockaddr*)&serverAddr,sizeof(serverAddr)); if (ret ==SOCKET_ERROR) {
printf(“Loi ket noi: %d”, ); ; ; };
a. : GetLastError, : closesocket (s), : WSACleanup().
b. : WSAGetLastError(), close(s), : Cleanup().
c. : WSALastError(), : closesocket(s), : để trống.
d. Không phương án nào đúng.
26. Để chuyển đổi một xâu sang địa chỉ IP, lệnh nào sau đây là đúng
a. inet_ntoa(“192.168.1.1”);
c. inet_addr(“192.168.1.1”);
b. inet_aton(“192.168.1.1”);
d. inet_stoi(“192.168.1.1”);
27. Trong Windows Socket, với các hàm không có tiền tố WSA thì mã lỗi trả về là 0 có nghĩa là: a. Thành công b. Thất bại c. Tùy trường hợp
28. Cấu trúc nào được sử dụng để khai báo địa chỉ socket internet: a. sock_addr c. sockaddr_in b. sockaddr d. sock_addr_in
29. Các giá trị lớn hơn 01 byte trong cấu trúc lưu trữ địa chỉ của socket được tổ chức theo kiểu: a. Đầu to c. Tùy trường hợp b. Đầu nhỏ
30. Để thực hiện phân giải tên miền bằng WinSock, cần bổ sung tệp tiêu đề nào a. Winsock2.h c. Ws2ip.h b. Ws2_32.h d. Ws2tcpip.h
Đoạn chương trình sau đọc nội dung một tệp tin và gửi đi qua kết nối c đã được thành lập.
Điền vào các vị trí , …các câu lệnh/giá trị thích hợp SOCKET c; FILE * fp; char buff[1024]; int len; fp = fopen("name.txt","rb"); while () { len = fread(,1,1024,); if (len <=0) break; send(,buff,,0); }7s closesocket(c); fclose(fp);
31. Giá trị thích hợp cho là a. fp c. !fp b. feof(fp) d. !feof(fp)
32. Giá trị thích hợp cho a. buff c. c b. fp d. &buff
33. Giá trị thích hợp cho là a. buff c. fp b. &buff d. &fp
34. Giá trị thích hợp cho là a. s c. fp b. &s d. &fp
35. Giá trị thích hợp cho là a. 1024 c. &len b. len d. 0.
Đoạn chương sau nhận về một xâu và gửi trả xâu theo thứ tự ngược lại. Điền vào các vị trí ,,,, các câu lệnh thích hợp: SOCKET s; char c, str[1024]; int i,len; while (1) { len = recv(s,str,1024,0); str[] = 0; for (i=0;i { c = ; str[i] = str[]; str[len-i-1]=; }; send(,str,len,0); }
36. Câu lệnh thích hợp cho là a. len c. 1024 b. i d. 0
37. Câu lệnh thích hợp cho là a. str[0] c. str[len-1] b. str[len] d. str[i]
38. Câu lệnh thích hợp cho là a. len/2 c. len-i b. len-1 d. len-i-1
39. Câu lệnh thích hợp cho là a. c c. str[0] b. str[i] d. str[i-1]
40. Câu lệnh thích hợp cho là a. c c. len b. s
ĐỀ THI GIỮA KỲ MÔN LẬP TRÌNH MẠNG 247
Thời gian: 90 phút – Không được phép dùng tài liệu
Phần 1. Trắc nghiệm
(6đ – tô kết quả vào phiếu trả lời trắc nghiệm)
1. Thư viện liên kết động của Windows Socket có tên là: a. TCP a. WinSock.DLL b. IP b. WinSock2.DLL c. ICMP c. WS2.DLL d. UDP d. WS2_32.DLL
11. Dịch vụ phân giải tên miền chạy ở tầng nào trong các
2. Công cụ nào sử dụng để kiểm tra hoạt động của một máy tầng sau đây
chủ phân giải tên miền a. Application a. Ping b. Transport b. Nslookup c. Internetwork c. Netstat d. Datalink d. Ipconfig
12. Giao thức nào được sử dụng để chia sẻ một địa chỉ toàn
3. Biên của thông điệp trong các giao thức hướng dòng có
cục cho một nhóm các máy tính trong mạng LAN.
được bảo toàn hay không ? a. VLAN a. Có b. MAC b. Không c. NAT
c. Tùy từng trường hợp, nếu được tổ chức hợp lý.
d. Không đáp án nào đúng
4. Công cụ dùng để theo dõi tài nguyên sử dụng của máy
13. Trong một mạng máy tính được chia sẻ chung một địa
tính trên hệ điều hành Windows là
chỉ IP toàn cục. Thiết lập nào sau đây sẽ cho phép một a. Task Manager
máy tính từ Internet chủ động kết nối đến một máy chủ b. Resource Monitor trong mạng. c. Wireshark a. DMZ d. Phương án a và b. b. Virtual Server
5. Nếu cần phát triển thêm trình điều khiển cho một loại c. Port Forwarding
thiết bị mới. Ứng dụng sẽ phải viết ở tầng nào của
d. Cả ba phương án trên. Windows Socket
14. Để có thể sử dụng dụng thư viện Windows Socket, tệp a. Application
thư viện cần khai báo cho quá trình liên kết là. b. Provider a. Winsock.lib c. Transport Protocol b. WS2_32.LIB d. Không tầng nào đúng c. WS2_32.DLL
6. Công cụ dùng để bắt các gói tin gửi ra và vào một giao d. Winsock2.dll
diện mạng của máy tính là
15. Nếu cần phải thiết kế một giao thức mới, ứng dụng sẽ a. Netcat
phải tích hợp vào tầng nào của Windows Socket API b. Network Monitor a. Application c. Cain b. Provider
d. Không phương án nào đúng. c. Transport Protocol
7. Công cụ đa năng, vừa có thể đóng vai trò client, vừa d. Không tầng nào đúng.
server, chạy trên giao thức TCP, UDP là.
16. Công cụ chuẩn đoán mạng dùng để hiển thị các kết nối a. Netcat
hiện có trên máy tính là b. TCPDump a. Wireshark c. Netstat b. TCPView d. Network Monitor c. Netcat
8. WSADATA là cấu trúc dùng để
d. Tất cả các công cụ trên
a. Truyền thông tin về phiên bản WinSock mà ứng
17. Trình điều khiển cho một thiết bị mạng sẽ được chạy ở dụng muốn khởi tạo chế độ
b. Nhận thông tin về phiên bản WinSock có trên a. User Mode hệ thống. b. Kernel Mode
c. Cả hai đáp án đều sai. c. System Mode
9. Để có thể sử dụng thư viện Windows Socket, tệp tiêu đề
d. Không phương án nào đúng. cần khai báo là:
18. Hàm nào sau đây thực hiện công việc khởi tạo Windows a. Winsock.h Socket b. Winsock2.h a. WSStartup c. Ws2_32.h b. WinsockStartup d. Ws2.h c. SocketStartup
10. Nếu cần phải viết một ứng dụng cần tính đáp ứng nhanh d. WSAStartup
và chấp nhận sai sót. Giao thức lựa chọn sẽ là
19. Hàm nào sau đây sử dụng để giải phóng Windows Socket API. a. WSACleanup b. WSCleanup c. Cleanup d. Phương án khác:…
20. Lệnh nào sau đây dùng để tạo một socket TCP
if (ret ==SOCKET_ERROR) {
a. socket(AF_INET,SOCK_STREAM,IPPROTO_TCP).
printf(“Loi ket noi: %d”, );
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP). ;
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP) ;
d. socket(AF_INET,SOCKSTREAM,IPPROTOTCP). };
21. Cấu trúc nào được sử dụng để khai báo địa chỉ socket
a. : GetLastError, : closesocket (s), : internet: WSACleanup(). a. sock_addr
b. : WSAGetLastError(), close(s), : b. sockaddr Cleanup(). c. sockaddr_in
c. : WSALastError(), : closesocket(s), d. sock_addr_in : để trống.
22. Các giá trị lớn hơn 01 byte trong cấu trúc lưu trữ địa chỉ
d. Không phương án nào đúng.
của socket được tổ chức theo kiểu:
27. Để chuyển đổi một địa chỉ IP lưu trong biến serverAddr a. Đầu to
lưu trữ địa chỉ socket sang dạng xâu ký tự, lệnh nào sau b. Đầu nhỏ đây là đúng c. Tùy trường hợp
a. inet_ntos(serverAddr.sin_addr);
23. Để lấy mã lỗi của thao tác ngay trước đó. Hàm nào sau
b. inet_ntoa(serverAddr.s_addr);
đây sẽ được sử dụng
c. inet_itos(serverAddr.sin_addr); a. GetLastError
d. inet_ntoa(serverAddr.sin_addr); b. WSAGetError
28. Lệnh nào sau đây dùng để tạo một socket UDP c. WSAGetLastError
a. socket(AF_INET,SOCK_UDP, IPPROTO_TCP). d. WSALastError
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
24. Để chuyển đổi một xâu sang địa chỉ IP, lệnh nào sau đây
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP) là đúng d. Không lệnh nào đúng.
a. inet_ntoa(“192.168.1.1”);
29. Để chuyển đổi giá trị cổng từ đầu nhỏ sang đầu to, lệnh
b. inet_aton(“192.168.1.1”);
nào sau đây sẽ được sử dụng
c. inet_addr(“192.168.1.1”); a. ntohl
d. inet_stoi(“192.168.1.1”); b. ntohs
25. Trong Windows Socket, với các hàm không có tiền tố c. htonl
WSA thì mã lỗi trả về là 0 có nghĩa là: d. htons a. Thành công
30. Để thực hiện phân giải tên miền bằng WinSock, cần bổ b. Thất bại sung tệp tiêu đề nào c. Tùy trường hợp a. Winsock2.h
26. Đoạn chương trình sau thực hiện kết nối đến một b. Ws2_32.h
server, điền vào vị trí , , các lệnh còn thiếu. c. Ws2ip.h ret = connect(s, d. Ws2tcpip.
(sockaddr*)&serverAddr,sizeof(serverAddr)); Phần 2. Tự luận
(4đ – viết ra giấy tự chuẩn bị)
Viết chương trình FileClient sử dụng mô hình blocking làm nhiệm vụ sau:
1. Kết nối đến server có địa chỉ/tên miền được nhập từ bàn phím.
2. Nhận tên file từ bàn phím và gửi yêu cầu tải file đến server, cú phảp có dạng “GET \n”.
3. Xử lý kết quả từ server
a. Nếu server báo lỗi, thì dữ liệu gửi trả có dạng “FAILED\n\n\n”.
b. Nếu server báo thành công thì dữ liệu gửi trả có dạng “OK\n\n\n\n”. Phân tích kết quả
từ server và ghi nội dung file nhận được ra đĩa.
4. Chương trình có thể tải nhiều file cùng một lúc, từ nhiều server.
ĐỀ THI GIỮA KỲ MÔN LẬP TRÌNH MẠNG 132
Thời gian: 90 phút – Không được phép dùng tài liệu
Phần 1. Trắc nghiệm
(6đ – tô kết quả vào phiếu trả lời trắc nghiệm)
1. Thư viện liên kết động của Windows Socket có tên là: a. Ping a. WinSock.DLL b. Nslookup b. WinSock2.DLL c. Netstat c. WS2.DLL d. Ipconfig d. WS2_32.DLL
11. Giao thức nào được sử dụng để chia sẻ một địa chỉ toàn
2. Biên của thông điệp trong các giao thức hướng dòng có
cục cho một nhóm các máy tính trong mạng LAN.
được bảo toàn hay không ? a. VLAN a. Có b. MAC b. Không c. NAT
c. Tùy từng trường hợp, nếu được tổ chức hợp lý.
d. Không đáp án nào đúng
3. Nếu cần phát triển thêm trình điều khiển cho một loại
12. Trong một mạng máy tính được chia sẻ chung một địa
thiết bị mới. Ứng dụng sẽ phải viết ở tầng nào của
chỉ IP toàn cục. Thiết lập nào sau đây sẽ cho phép một Windows Socket
máy tính từ Internet chủ động kết nối đến một máy chủ a. Application trong mạng. b. Provider a. DMZ c. Transport Protocol b. Virtual Server d. Không tầng nào đúng c. Port Forwarding
4. Công cụ dùng để bắt các gói tin gửi ra và vào một giao
d. Cả ba phương án trên.
diện mạng của máy tính là
13. Công cụ dùng để theo dõi tài nguyên sử dụng của máy a. Netcat
tính trên hệ điều hành Windows là b. Network Monitor a. Task Manager c. Cain b. Resource Monitor
d. Không phương án nào đúng. c. Wireshark
5. WSADATA là cấu trúc dùng để d. Phương án a và b.
a. Truyền thông tin về phiên bản WinSock mà ứng
14. Để có thể sử dụng dụng thư viện Windows Socket, tệp dụng muốn khởi tạo
thư viện cần khai báo cho quá trình liên kết là.
b. Nhận thông tin về phiên bản WinSock có trên a. Winsock.lib hệ thống. b. WS2_32.LIB
c. Cả hai đáp án đều sai. c. WS2_32.DLL
6. Để có thể sử dụng thư viện Windows Socket, tệp tiêu đề d. Winsock2.dll cần khai báo là:
15. Nếu cần phải thiết kế một giao thức mới, ứng dụng sẽ a. Winsock.h
phải tích hợp vào tầng nào của Windows Socket API b. Winsock2.h a. Application c. Ws2_32.h b. Provider d. Ws2.h c. Transport Protocol
7. Trình điều khiển cho một thiết bị mạng sẽ được chạy ở d. Không tầng nào đúng. chế độ
16. Công cụ đa năng, vừa có thể đóng vai trò client, vừa a. User Mode
server, chạy trên giao thức TCP, UDP là. b. Kernel Mode a. Netcat c. System Mode b. TCPDump
d. Không phương án nào đúng. c. Netstat
8. Nếu cần phải viết một ứng dụng cần tính đáp ứng nhanh d. Network Monitor
và chấp nhận sai sót. Giao thức lựa chọn sẽ là
17. Công cụ chuẩn đoán mạng dùng để hiển thị các kết nối a. TCP
hiện có trên máy tính là b. IP a. Wireshark c. ICMP b. TCPView d. UDP c. Netcat
9. Dịch vụ phân giải tên miền chạy ở tầng nào trong các
d. Tất cả các công cụ trên tầng sau đây
18. Hàm nào sau đây thực hiện công việc khởi tạo Windows a. Application Socket b. Transport a. WSStartup c. Internetwork b. WinsockStartup d. Datalink c. SocketStartup
10. Công cụ nào sử dụng để kiểm tra hoạt động của một máy d. WSAStartup
chủ phân giải tên miền
19. Hàm nào sau đây sử dụng để giải phóng Windows Socket API. a. WSACleanup b. WSCleanup c. Cleanup d. Phương án khác:…
20. Lệnh nào sau đây dùng để tạo một socket TCP b. Thất bại
a. socket(AF_INET,SOCK_STREAM,IPPROTO_TCP). c. Tùy trường hợp
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
27. Để chuyển đổi một địa chỉ IP lưu trong biến serverAddr
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP)
lưu trữ địa chỉ socket sang dạng xâu ký tự, lệnh nào sau
d. socket(AF_INET,SOCKSTREAM,IPPROTOTCP). đây là đúng
21. Để chuyển đổi giá trị cổng từ đầu nhỏ sang đầu to, lệnh
a. inet_ntos(serverAddr.sin_addr);
nào sau đây sẽ được sử dụng
b. inet_ntoa(serverAddr.s_addr); a. ntohl
c. inet_itos(serverAddr.sin_addr); b. ntohs
d. inet_ntoa(serverAddr.sin_addr); c. htonl
28. Đoạn chương trình sau thực hiện kết nối đến một d. htons
server, điền vào vị trí , , các lệnh còn thiếu.
22. Cấu trúc nào được sử dụng để khai báo địa chỉ socket ret = connect(s, internet:
(sockaddr*)&serverAddr,sizeof(serverAddr)); a. sock_addr
if (ret ==SOCKET_ERROR) { b. sockaddr
printf(“Loi ket noi: %d”, ); c. sockaddr_in ; d. sock_addr_in ;
23. Các giá trị lớn hơn 01 byte trong cấu trúc lưu trữ địa chỉ };
của socket được tổ chức theo kiểu:
a. : GetLastError, : closesocket (s), : a. Đầu to WSACleanup(). b. Đầu nhỏ
b. : WSAGetLastError(), close(s), : c. Tùy trường hợp Cleanup().
24. Để lấy mã lỗi của thao tác ngay trước đó. Hàm nào sau
c. : WSALastError(), : closesocket(s),
đây sẽ được sử dụng : để trống. a. GetLastError
d. Không phương án nào đúng. b. WSAGetError
29. Lệnh nào sau đây dùng để tạo một socket UDP c. WSAGetLastError
a. socket(AF_INET,SOCK_UDP, IPPROTO_TCP). d. WSALastError
b. socket(AF_INET,SOCK_DGRAM,IPROTO_TCP).
25. Để chuyển đổi một xâu sang địa chỉ IP, lệnh nào sau đây
c. Socket(AF_INET,SOCK_STREAM,IPPROTO_UDP) là đúng d. Không lệnh nào đúng.
a. inet_ntoa(“192.168.1.1”);
30. Để thực hiện phân giải tên miền bằng WinSock, cần bổ
b. inet_aton(“192.168.1.1”); sung tệp tiêu đề nào
c. inet_addr(“192.168.1.1”); a. Winsock2.h
d. inet_stoi(“192.168.1.1”); b. Ws2_32.h
26. Trong Windows Socket, với các hàm không có tiền tố c. Ws2ip.h
WSA thì mã lỗi trả về là 0 có nghĩa là: d. Ws2tcpip. a. Thành công Phần 2. Tự luận
(4đ – viết ra giấy tự chuẩn bị)
Viết chương trình FileClient sử dụng mô hình select làm nhiệm vụ sau:
1. Kết nối đến server có địa chỉ/tên miền được nhập từ bàn phím.
2. Nhận tên file từ bàn phím và gửi yêu cầu tải file đến server, cú phảp có dạng “GET \n”.
3. Xử lý kết quả từ server
a. Nếu server báo lỗi, thì dữ liệu gửi trả có dạng “FAILED\n\n\n”.
b. Nếu server báo thành công thì dữ liệu gửi trả có dạng “OK\n\n\n\n”. Phân tích kết quả
từ server và ghi nội dung file nhận được ra đĩa.
4. Chương trình có thể tải nhiều file cùng một lúc. Bộ môn KTMT
ĐỀ THI MÔN: LẬP TRÌNH MẠNG STT
HỌ VÀ TÊN:………………………………………….…… SHSH: …………….…..…. LỚP: ……..……
Thời gian làm bài: 90 phút ĐỀ
Không được sử dụng tài liệu 1 Ngày thi: 1/4/2014
Một giao thức chat đơn giản chạy ở cổng TCP 8888 và được mô tả bằng các gói tin gửi nhận giữa client và
server có cấu trúc như sau: typedef struct { int iType; int iLength; char szNickname[32]; char bData[1024]; } Trong đó:
 iType là loại gói tin. Có thể nhận một trong các giá trị sau:
o iType = 0: Đăng nhập, được gửi từ client => server, khi đó iLength = 0 và szNickname là
nickname client muốn đăng kí với server. Giả sử việc đăng nhập không cần mật khẩu và server
sẽ luôn luôn chấp nhận bất kì nickname nào, kể cả nickname đã sử dụng trước đó.
o iType = 1: Chat, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì iLength là chiều dài câu thoại, szNickname là nickname đích sẽ nhận câu thoại. Server
nhận được gói tin này sẽ chỉnh sửa lại trường szNickname của gói tin và chuyển tiếp đến client.
Client khi nhận được gói tin này sẽ hiểu szNickname là nickname gửi.
o iType = 2: List, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì có nghĩa là client muốn lấy danh sách các nickname đang đăng nhập. Ilength lúc đó
bằng 0 và bData không có ý nghĩa gì. Nếu được gửi từ server => client nghĩa là server thông báo
danh sách các nickname đang đăng nhập, iLength sẽ là chiều dài dữ liệu phần bData, bData sẽ
chứa danh sách các nickname, mỗi nickname chiếm chính xác 32 kí tự (mặc dù thực tế có thể ít
hơn, khi đó các kí tự NULL sẽ được thêm vào cho đủ 32 kí tự). Ví dụ có 3 nickname thì iLength =
96 và bData[0] chứa nickname thứ 1, bData[32] chứa nickname thứ 2, và bData[64] chứa
nickname thứ 3. Server có thể chủ động gửi gói tin này đến tất cả các client mỗi khi có một client
vừa đăng nhập hoặc đăng xuất.
 iLength: Chiều dài dữ liệu phần bData, có thể dài tối đa 1024 kí tự.
 szNickname: Mang nhiều ý nghĩa, tùy theo trường iType: Nickname muốn đăng nhập, nickname muốn
gửi tin nhắn hoặc nickname vừa gửi tin nhắn.
 bData: dữ liệu của gói tin, mang nhiều ý nghĩa tùy theo trường iType.
Ban đầu khi client muốn tham gia vào hệ thống, nó phải gửi gói tin để đăng nhập với nickname do người
dùng chọn từ bàn phím. Server sẽ tự động gửi trả danh sách các nickname hiện đang đăng nhập. Client sẽ
đợi lệnh từ người dùng và gửi câu thoại đến một nickname cụ thể theo khuôn dạng dữ liệu như trên. Client
cũng sẽ tự động hiện các câu thoại nhận được từ nickname khác hoặc danh sách các nickname (nếu có thay đổi) từ server.
Câu 1: Viết chương trình console ChatClient kết nối với server theo giao thức trên. Sử dụng mô hình
blocking để gửi nhận dữ liệu.
Câu 2: Viết chương trình console ChatServer để tiếp nhận các client theo giao thức trên. Sử dụng mô hình
blocking để gửi nhận dữ liệu. Bộ môn KTMT
ĐỀ THI MÔN: LẬP TRÌNH MẠNG STT
HỌ VÀ TÊN:………………………………………….…… SHSH: …………….…..…. LỚP: ……..……
Thời gian làm bài: 90 phút ĐỀ
Không được sử dụng tài liệu 2 Ngày thi: 1/4/2014
Một giao thức chat đơn giản chạy ở cổng TCP 8888 và được mô tả bằng các gói tin gửi nhận giữa client và
server có cấu trúc như sau: typedef struct { int iType; int iLength; char szNickname[32]; char bData[1024]; } Trong đó:
 iType là loại gói tin. Có thể nhận một trong các giá trị sau:
o iType = 0: Đăng nhập, được gửi từ client => server, khi đó iLength = 0 và szNickname là
nickname client muốn đăng kí với server. Giả sử việc đăng nhập không cần mật khẩu và server
sẽ luôn luôn chấp nhận bất kì nickname nào, kể cả nickname đã sử dụng trước đó.
o iType = 1: Chat, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì iLength là chiều dài câu thoại, szNickname là nickname đích sẽ nhận câu thoại. Server
nhận được gói tin này sẽ chỉnh sửa lại trường szNickname của gói tin và chuyển tiếp đến client.
Client khi nhận được gói tin này sẽ hiểu szNickname là nickname gửi.
o iType = 2: List, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì có nghĩa là client muốn lấy danh sách các nickname đang đăng nhập. Ilength lúc đó
bằng 0 và bData không có ý nghĩa gì. Nếu được gửi từ server => client nghĩa là server thông báo
danh sách các nickname đang đăng nhập, iLength sẽ là chiều dài dữ liệu phần bData, bData sẽ
chứa danh sách các nickname, mỗi nickname chiếm chính xác 32 kí tự (mặc dù thực tế có thể ít
hơn, khi đó các kí tự NULL sẽ được thêm vào cho đủ 32 kí tự). Ví dụ có 3 nickname thì iLength =
96 và bData[0] chứa nickname thứ 1, bData[32] chứa nickname thứ 2, và bData[64] chứa
nickname thứ 3. Server có thể chủ động gửi gói tin này đến tất cả các client mỗi khi có một client
vừa đăng nhập hoặc đăng xuất.
 iLength: Chiều dài dữ liệu phần bData, có thể dài tối đa 1024 kí tự.
 szNickname: Mang nhiều ý nghĩa, tùy theo trường iType: Nickname muốn đăng nhập, nickname muốn
gửi tin nhắn hoặc nickname vừa gửi tin nhắn.
 bData: dữ liệu của gói tin, mang nhiều ý nghĩa tùy theo trường iType.
Ban đầu khi client muốn tham gia vào hệ thống, nó phải gửi gói tin để đăng nhập với nickname do người
dùng chọn từ bàn phím. Server sẽ tự động gửi trả danh sách các nickname hiện đang đăng nhập. Client sẽ
đợi lệnh từ người dùng và gửi câu thoại đến một nickname cụ thể theo khuôn dạng dữ liệu như trên. Client
cũng sẽ tự động hiện các câu thoại nhận được từ nickname khác hoặc danh sách các nickname (nếu có thay đổi) từ server.
Câu 1: Viết chương trình console ChatClient kết nối với server theo giao thức trên. Sử dụng mô hình select
để gửi nhận dữ liệu.
Câu 2: Viết chương trình console ChatServer để tiếp nhận các client theo giao thức trên. Sử dụng mô hình
select để gửi nhận dữ liệu. Bộ môn KTMT
ĐỀ THI MÔN: LẬP TRÌNH MẠNG STT
HỌ VÀ TÊN:………………………………………….…… SHSH: …………….…..…. LỚP: ……..……
Thời gian làm bài: 90 phút ĐỀ
Không được sử dụng tài liệu 3 Ngày thi: 1/4/2014
Một giao thức chat đơn giản chạy ở cổng TCP 8888 và được mô tả bằng các gói tin gửi nhận giữa client và
server có cấu trúc như sau: typedef struct { int iType; int iLength; char szNickname[32]; char bData[1024]; } Trong đó:
 iType là loại gói tin. Có thể nhận một trong các giá trị sau:
o iType = 0: Đăng nhập, được gửi từ client => server, khi đó iLength = 0 và szNickname là
nickname client muốn đăng kí với server. Giả sử việc đăng nhập không cần mật khẩu và server
sẽ luôn luôn chấp nhận bất kì nickname nào, kể cả nickname đã sử dụng trước đó.
o iType = 1: Chat, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì iLength là chiều dài câu thoại, szNickname là nickname đích sẽ nhận câu thoại. Server
nhận được gói tin này sẽ chỉnh sửa lại trường szNickname của gói tin và chuyển tiếp đến client.
Client khi nhận được gói tin này sẽ hiểu szNickname là nickname gửi.
o iType = 2: List, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì có nghĩa là client muốn lấy danh sách các nickname đang đăng nhập. iLength lúc đó
bằng 0 và bData không có ý nghĩa gì. Nếu được gửi từ server => client nghĩa là server thông báo
danh sách các nickname đang đăng nhập, iLength sẽ là chiều dài dữ liệu phần bData, bData sẽ
chứa danh sách các nickname, mỗi nickname chiếm chính xác 32 kí tự (mặc dù thực tế có thể ít
hơn, khi đó các kí tự NULL sẽ được thêm vào cho đủ 32 kí tự). Ví dụ có 3 nickname thì iLength =
96 và bData[0] chứa nickname thứ 1, bData[32] chứa nickname thứ 2, và bData[64] chứa
nickname thứ 3. Server có thể chủ động gửi gói tin này đến tất cả các client mỗi khi có một client
vừa đăng nhập hoặc đăng xuất.
 iLength: Chiều dài dữ liệu phần bData, có thể dài tối đa 1024 kí tự.
 szNickname: Mang nhiều ý nghĩa, tùy theo trường iType: Nickname muốn đăng nhập, nickname muốn
gửi tin nhắn hoặc nickname vừa gửi tin nhắn.
 bData: dữ liệu của gói tin, mang nhiều ý nghĩa tùy theo trường iType.
Ban đầu khi client muốn tham gia vào hệ thống, nó phải gửi gói tin để đăng nhập với nickname do người
dùng chọn từ bàn phím. Server sẽ tự động gửi trả danh sách các nickname hiện đang đăng nhập. Client sẽ
đợi lệnh từ người dùng và gửi câu thoại đến một nickname cụ thể theo khuôn dạng dữ liệu như trên. Client
cũng sẽ tự động hiện các câu thoại nhận được từ nickname khác hoặc danh sách các nickname (nếu có thay đổi) từ server.
Câu 1: Viết chương trình console ChatClient kết nối với server theo giao thức trên. Sử dụng mô hình
WSAEventSelect để gửi nhận dữ liệu.
Câu 2: Viết chương trình console ChatServer để tiếp nhận các client theo giao thức trên. Sử dụng mô hình
WSAEventSelect để gửi nhận dữ liệu. Bộ môn KTMT
ĐỀ THI MÔN: LẬP TRÌNH MẠNG STT
HỌ VÀ TÊN:………………………………………….…… SHSH: …………….…..…. LỚP: ……..……
Thời gian làm bài: 90 phút ĐỀ
Không được sử dụng tài liệu 4 Ngày thi: 1/4/2014
Một giao thức chat đơn giản chạy ở cổng TCP 8888 và được mô tả bằng các gói tin gửi nhận giữa client và
server có cấu trúc như sau: typedef struct { int iType; int iLength; char szNickname[32]; char bData[1024]; } Trong đó:
 iType là loại gói tin. Có thể nhận một trong các giá trị sau:
o iType = 0: Đăng nhập, được gửi từ client => server, khi đó iLength = 0 và szNickname là
nickname client muốn đăng kí với server. Giả sử việc đăng nhập không cần mật khẩu và server
sẽ luôn luôn chấp nhận bất kì nickname nào, kể cả nickname đã sử dụng trước đó.
o iType = 1: Chat, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì iLength là chiều dài câu thoại, szNickname là nickname đích sẽ nhận câu thoại. Server
nhận được gói tin này sẽ chỉnh sửa lại trường szNickname của gói tin và chuyển tiếp đến client.
Client khi nhận được gói tin này sẽ hiểu szNickname là nickname gửi.
o iType = 2: List, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì có nghĩa là client muốn lấy danh sách các nickname đang đăng nhập. Ilength lúc đó
bằng 0 và bData không có ý nghĩa gì. Nếu được gửi từ server => client nghĩa là server thông báo
danh sách các nickname đang đăng nhập, iLength sẽ là chiều dài dữ liệu phần bData, bData sẽ
chứa danh sách các nickname, mỗi nickname chiếm chính xác 32 kí tự (mặc dù thực tế có thể ít
hơn, khi đó các kí tự NULL sẽ được thêm vào cho đủ 32 kí tự). Ví dụ có 3 nickname thì iLength =
96 và bData[0] chứa nickname thứ 1, bData[32] chứa nickname thứ 2, và bData[64] chứa
nickname thứ 3. Server có thể chủ động gửi gói tin này đến tất cả các client mỗi khi có một client
vừa đăng nhập hoặc đăng xuất.
 iLength: Chiều dài dữ liệu phần bData, có thể dài tối đa 1024 kí tự.
 szNickname: Mang nhiều ý nghĩa, tùy theo trường iType: Nickname muốn đăng nhập, nickname muốn
gửi tin nhắn hoặc nickname vừa gửi tin nhắn.
 bData: dữ liệu của gói tin, mang nhiều ý nghĩa tùy theo trường iType.
Ban đầu khi client muốn tham gia vào hệ thống, nó phải gửi gói tin để đăng nhập với nickname do người
dùng chọn từ bàn phím. Server sẽ tự động gửi trả danh sách các nickname hiện đang đăng nhập. Client sẽ
đợi lệnh từ người dùng và gửi câu thoại đến một nickname cụ thể theo khuôn dạng dữ liệu như trên. Client
cũng sẽ tự động hiện các câu thoại nhận được từ nickname khác hoặc danh sách các nickname (nếu có thay đổi) từ server.
Câu 1: Viết chương trình console ChatClient kết nối với server theo giao thức trên. Sử dụng mô hình
Overlapped Event để gửi nhận dữ liệu.
Câu 2: Viết chương trình console ChatServer để tiếp nhận các client theo giao thức trên. Sử dụng mô hình
Overlapped Event để gửi nhận dữ liệu. Bộ môn KTMT
ĐỀ THI MÔN: LẬP TRÌNH MẠNG STT
HỌ VÀ TÊN:………………………………………….…… SHSH: …………….…..…. LỚP: ……..……
Thời gian làm bài: 90 phút ĐỀ
Không được sử dụng tài liệu 5 Ngày thi: 1/4/2014
Một giao thức chat đơn giản chạy ở cổng TCP 8888 và được mô tả bằng các gói tin gửi nhận giữa client và
server có cấu trúc như sau: typedef struct { int iType; int iLength; char szNickname[32]; char bData[1024]; } Trong đó:
 iType là loại gói tin. Có thể nhận một trong các giá trị sau:
o iType = 0: Đăng nhập, được gửi từ client => server, khi đó iLength = 0 và szNickname là
nickname client muốn đăng kí với server. Giả sử việc đăng nhập không cần mật khẩu và server
sẽ luôn luôn chấp nhận bất kì nickname nào, kể cả nickname đã sử dụng trước đó.
o iType = 1: Chat, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì iLength là chiều dài câu thoại, szNickname là nickname đích sẽ nhận câu thoại. Server
nhận được gói tin này sẽ chỉnh sửa lại trường szNickname của gói tin và chuyển tiếp đến client.
Client khi nhận được gói tin này sẽ hiểu szNickname là nickname gửi.
o iType = 2: List, được gửi từ client => server hoặc server => client. Nếu được gửi từ client =>
server thì có nghĩa là client muốn lấy danh sách các nickname đang đăng nhập. Ilength lúc đó
bằng 0 và bData không có ý nghĩa gì. Nếu được gửi từ server => client nghĩa là server thông báo
danh sách các nickname đang đăng nhập, iLength sẽ là chiều dài dữ liệu phần bData, bData sẽ
chứa danh sách các nickname, mỗi nickname chiếm chính xác 32 kí tự (mặc dù thực tế có thể ít
hơn, khi đó các kí tự NULL sẽ được thêm vào cho đủ 32 kí tự). Ví dụ có 3 nickname thì iLength =
96 và bData[0] chứa nickname thứ 1, bData[32] chứa nickname thứ 2, và bData[64] chứa
nickname thứ 3. Server có thể chủ động gửi gói tin này đến tất cả các client mỗi khi có một client
vừa đăng nhập hoặc đăng xuất.
 iLength: Chiều dài dữ liệu phần bData, có thể dài tối đa 1024 kí tự.
 szNickname: Mang nhiều ý nghĩa, tùy theo trường iType: Nickname muốn đăng nhập, nickname muốn
gửi tin nhắn hoặc nickname vừa gửi tin nhắn.
 bData: dữ liệu của gói tin, mang nhiều ý nghĩa tùy theo trường iType.
Ban đầu khi client muốn tham gia vào hệ thống, nó phải gửi gói tin để đăng nhập với nickname do người
dùng chọn từ bàn phím. Server sẽ tự động gửi trả danh sách các nickname hiện đang đăng nhập. Client sẽ
đợi lệnh từ người dùng và gửi câu thoại đến một nickname cụ thể theo khuôn dạng dữ liệu như trên. Client
cũng sẽ tự động hiện các câu thoại nhận được từ nickname khác hoặc danh sách các nickname (nếu có thay đổi) từ server.
Câu 1: Viết chương trình console ChatClient kết nối với server theo giao thức trên. Sử dụng mô hình
Overlapped Completion Routine để gửi nhận dữ liệu.
Câu 2: Viết chương trình console ChatServer để tiếp nhận các client theo giao thức trên. Sử dụng mô hình
Overlapped Completion Routine để gửi nhận dữ liệu.
Ngân hàng câu hỏi thi Lập Trình Mạng – Lương Ánh Hoàng
1. Thư viện liên kết động của Windows Socket có tên là: a. WinSock.DLL c. WS2.DLL b. WinSock2.DLL d. WS2_32.DLL
2. Để có thể sử dụng thư viện Windows Socket, tệp tiêu đề cần khai báo là: a. Winsock.h c. Ws2_32.h b. Winsock2.h d. Ws2.h
3. Để có thể sử dụng dụng thư viện Windows Socket, tệp thư viện cần khai báo cho quá trình liên kết là. a. Winsock.lib c. WS2_32.DLL b. WS2_32.LIB d. Winsock2.dll
4. Công cụ chuẩn đoán mạng dùng để hiển thị các kết nối hiện có trên máy tính là a. Wireshark c. Netcat b. TCPView
d. Tất cả các công cụ trên
5. Công cụ dùng để theo dõi tài nguyên sử dụng của máy tính trên hệ điều hành Windows là a. Task Manager c. Wireshark b. Resource Monitor d. Phương án a và b.
6. Công cụ dùng để bắt các gói tin gửi ra và vào một giao diện mạng của máy tính là a. Netcat c. Wireshark b. Network Monitor d. b và c.
7. Công cụ đa năng, vừa có thể đóng vai trò client, vừa server, chạy trên giao thức TCP, UDP là. a. Netcat c. Netstat b. TCPDump d. Network Monitor
8. Nếu cần phải viết một ứng dụng cần tính đáp ứng nhanh và chấp nhận sai sót. Giao thức lựa chọn sẽ là a. TCP c. ICMP b. IP d. UDP
9. Dịch vụ phân giải tên miền chạy ở tầng nào trong các tầng sau đây a. Application c. Internetwork b. Transport d. Datalink
10. Giao thức nào được sử dụng để chia sẻ một địa chỉ toàn cục cho một nhóm các máy tính trong mạng LAN. a. VLAN c. NAT b. MAC
d. Không đáp án nào đúng
11. Trong một mạng máy tính được chia sẻ chung một địa chỉ IP toàn cục. Thiết lập nào sau đây sẽ cho phép
một máy tính từ Internet chủ động kết nối đến một máy chủ trong mạng. a. DMZ c. Port Forwarding b. Virtual Server
d. Cả ba phương án trên.
12. Công cụ nào sử dụng để kiểm tra hoạt động của một máy chủ phân giải tên miền a. Ping c. Netstat b. Nslookup d. Ipconfig
13. Nếu cần phát triển thêm trình điều khiển cho một loại thiết bị mới. Ứng dụng sẽ phải viết ở tầng nào của Windows Socket a. Application c. Transport Protocol b. Provider d. Không tầng nào đúng
14. Nếu cần phải thiết kế một giao thức mới, ứng dụng sẽ phải tích hợp vào tầng nào của Windows Socket API a. Application c. Transport Protocol b. Provider d. Không tầng nào đúng.
15. Trình điều khiển cho một thiết bị mạng chạy ở chế độ a. User Mode c. System Mode b. Kernel Mode
d. Không phương án nào đúng.
16. Biên của thông điệp trong các giao thức hướng dòng có được bảo toàn hay không ? a. Có
c. Tùy từng trường hợp, nếu được tổ chức b. Không hợp lý.
17. Hàm nào sau đây thực hiện công việc khởi tạo Windows Socket a. WSStartup c. SocketStartup b. WinsockStartup d. WSAStartup
18. WSADATA là cấu trúc dùng để
a. Truyền thông tin về phiên bản WinSock
b. Nhận thông tin về phiên bản WinSock
mà ứng dụng muốn khởi tạo có trên hệ thống.
c. Cả hai đáp án đều sai.
19. Hàm nào sau đây sử dụng để giải phóng Windows Socket API. a. WSACleanup c. Cleanup b. WSCleanup d. Phương án khác:…
20. Để lấy mã lỗi của thao tác ngay trước đó. Hàm nào sau đây sẽ được sử dụng a. GetLastError c. WSAGetLastError b. WSAGetError d. WSALastError
21. Đoạn chương trình sau thực hiện kết nối đến một server, điền vào vị trí , , các lệnh còn thiếu.
ret = connect(s, (sockaddr*)&serverAddr,sizeof(serverAddr)); if (ret ==SOCKET_ERROR) {
printf(“Loi ket noi: %d”, ); ; ; };
a. : GetLastError, : closesocket (s), c. : WSALastError(), : : WSACleanup().
closesocket(s), : để trống.
b. : WSAGetLastError(), close(s), d. : WSAGetLastError(), : : Cleanup().
closesocket(s), : WSACleanup().
22. Trong Windows Socket, với các hàm không có tiền tố WSA thì mã lỗi trả về là 0 có nghĩa là: a. Thành công c. Tùy trường hợp b. Thất bại
23. Lệnh nào sau đây dùng để tạo một socket TCP
a. socket(AF_INET,SOCK_STREAM,IPPROT
c. Socket(AF_INET,SOCK_STREAM,IPPROT O_TCP). O_UDP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_
d. socket(AF_INET,SOCKSTREAM,IPPROT TCP). OTCP).
24. Lệnh nào sau đây dùng để tạo một socket UDP a. socket(AF_INET,SOCK_UDP,
c. socket(AF_INET,SOCK_STREAM,IPPROT IPPROTO_TCP). O_UDP).
b. socket(AF_INET,SOCK_DGRAM,IPROTO_
d. socket(AF_INET, SOCK_DGRAM, TCP). IPPROTO_UDP).
25. Cấu trúc nào được sử dụng để khai báo địa chỉ socket internet: a. sock_addr c. sockaddr_in b. sockaddr d. sock_addr_in
26. Các giá trị lớn hơn 01 byte trong cấu trúc lưu trữ địa chỉ của socket được tổ chức theo kiểu: a. Đầu to c. Tùy trường hợp b. Đầu nhỏ
27. Để chuyển đổi một xâu sang địa chỉ IP, lệnh nào sau đây là đúng
a. inet_ntoa(“192.168.1.1”);
c. inet_addr(“192.168.1.1”);
b. inet_aton(“192.168.1.1”);
d. inet_stoi(“192.168.1.1”);
28. Để chuyển đổi một địa chỉ IP lưu trong biến serverAddr lưu trữ địa chỉ socket sang dạng xâu ký tự, lệnh nào sau đây là đúng
a. inet_ntos(serverAddr.sin_addr);
c. inet_itos(serverAddr.sin_addr);
b. inet_ntoa(serverAddr.s_addr);
d. inet_ntoa(serverAddr.sin_addr);
29. Để chuyển đổi giá trị cổng từ đầu nhỏ sang đầu to, lệnh nào sau đây sẽ được sử dụng a. ntohl c. htonl b. ntohs d. htons
30. Để thực hiện phân giải tên miền bằng WinSock, cần bổ sung tệp tiêu đề nào a. Winsock2.h c. Ws2ip.h b. Ws2_32.h d. Ws2tcpip.h
31. Để thực hiện phân giải tên miền bằng WinSock, hàm nào sau đây có thể sử dụng a. getaddrinfo b. gethostinfo c. getpeerinfo d. Cả ba hàm trên
32. Kết quả trả về của thao tác phân giải tên miền là và phải giải phóng bằng hàm/toán tử a. : Mảng, delete
b. : Danh sách liên kết đơn, free
c. : Danh sách liên kết kép,
d. : Danh sách liên kết đơn, freeaddrinfo freeaddrinfo
33. Trường nào sau đây trong cấu trúc addrinfo chứa thông tin về địa chỉ socket phân giải được. a. ai_addr. c. addr. b. sock_addr. d. in_addr.
34. Trong trường hợp nào sau đây hàm bind sẽ thất bại a. Tường lửa chặn. c. Socket không hợp lệ.
b. Đã có ứng dụng khác mở sử dụng cổng
d. Cả ba trường hợp trên. trên.
35. Lệnh nào sau đây sẽ gắn một socket s vào giao diện mạng bất kỳ được mô tả trong cấu trúc địa chỉ serverAddr.
a. bind(s, (sockaddr_in*)&serverAddr,
c. bind(s, (sockaddr*)&serverAddr, sizeof(serverAddr)); sizeof(sockaddr_in));
b. bind(s, (sockaddr*)serverAddr,
d. bind(s, (sockaddr*)&serverAddr, sizeof(serverAddr)); sizeof(serverAddr));
36. Lệnh nào sau đây sẽ gán giá trị cổng 8080 cho cấu trúc địa chỉ serverAddr.
a. serverAddr.sin_port = 8080.
c. serverAddr.sin_port = htonl(8080). b. serverAddr.s_port = 8080.
d. serverAddr.sin_port = htons(8080).
37. Đoạn chương trình sau sẽ thực hiện chấp nhận kết nối từ client. Điền vào chỗ trống các phương án cần thiết SOCKET server,client; sockaddr_in clientAddr; int len; len = ;
client = accept(server,, );
a. = 0, = clientAddr, = len.
c. = 0, = (sockaddr*)&clientAddr,
b. = sizeof(client), = &clientAddr, = &len. =len.
d. = sizeof(clientAddr), =
(sockaddr*)&clientAddr,&len.
38. Đoạn chương trình sau thực hiện đọc dữ liệu từ bàn phím và gửi đi qua socket s. Điền vào chỗ trống những lệnh còn thiếu. char str[1024]; int ret = 0; gets(str); = send(s,str,,0); if ( <= 0) { printf("Loi gui xau!"); ; }
a. = ret, = 1024, = để trống.
c. = str, = strlen(str), =
b. = ret, = sizeof(str), = close(s). close(s).
d. = ret, = strlen(str), = closesocket(s).
39. Trong lời gọi hàm recv(s,buff,1024,0), giá trị 1024 có nghĩa là: a. Số byte muốn nhận
c. Kích thước bộ đệm.
b. Số byte tối đa muốn nhận.
d. Cả b và c đều đúng.
40. Khi socket hoạt động ở chế độ đồng bộ, mỗi lời gọi hàm sẽ:
a. Chặn tất cả các luồng của chương trình
c. Chỉ chặn luồng chứa lời gọi, các luồng
cho đến khi thao tác vào ra hoàn tất
khác vẫn chạy bình thường.
b. Chặn tất cả các luồng trừ luồng chứa lời
d. Không chặn luồng nào cả. gọi
41. Khi socket hoạt động ở chế độ bất đồng bộ, mỗi lời gọi hàm sẽ
a. Chặn tất cả các luồng của chương trình
c. Chỉ chặn luồng chứa lời gọi, các luồng
cho đến khi thao tác vào ra hoàn tất
khác vẫn chạy bình thường.
b. Chặn tất cả các luồng trừ luồng chứa lời
d. Không chặn luồng nào cả. gọi
42. Mặc định socket khi được tạo ra hoạt động ở chế độ , hàm sẽ thay đổi chế độ hoạt động của socket.
a. : đồng bộ, : ioctlsocket.
c. : đồng bộ, : WSAAsyncSelect.
b. : bất đông bộ, :ioctlsocket. d. Cả a và c đều đúng
43. Khi socket s hoạt động ở chế độ đồng bộ, hàm recv(s,buff,1024,0) sẽ không chặn luồng chứa lời gọi trong
trường hợp nào sau đây.
a. Có dữ liệu từ bộ đệm hệ thống nhưng c. Kết nối bị đóng. không đủ 1024 byte.
d. Cả ba phương án trên đều đúng.
b. Có đủ 1024 byte dữ liệu từ bộ đệm hệ thống.
44. Nếu cần xây dựng server đáp ứng được tối thiểu 10 kết nối, chương trình sẽ cần khai báo bao nhiêu socket ? a. 11 c. 20 b. 10 d. 21
45. Nếu việc gửi dữ liệu cho các kết nối được tập trung vào trong một luồng, thì mô hình Blocking cần tối thiểu
bao nhiêu luồng để đáp ứng được 100 kết nối. a. 100 c. 201 b. 200 d. 101
46. Trong mô hình Select, để thăm dò sự kiện kết nối đến server thành công, client cần cho socket vào tập nào a. readfds c. exceptfds b. writefds
d. Cả ba tập đều được.
47. Trong mô hình Select, để thăm dò sự kiện nhận dữ liệu OOB, client cần cho socket vào tập nào a. readfds c. exceptfds b. writefds
d. Cả ba tập đều được.
48. Nếu dùng mô hình Select và thăm dò sự kiện cho 100 kết nối, ứng dụng sẽ cần bao nhiêu luồng ? a. 100 c. 101 b. 2 d. 1.
49. Trong mô hình Select, socket chạy ở chế độ nào ? a. Đồng bộ c. Không xác định b. Bất đồng bộ
50. Hàm callback WindowProc được gọi trong ngữ cảnh của:
a. Một luồng riêng được hệ thống tạo ra.
c. Luồng phụ do chương trình tạo ra.
b. Luồng chính xử lý giao diện. d. Phương án khác…
51. Trong các hàm xử lý sự kiện của chương trình có giao diện đồ họa, có nên gọi các hàm đồng bộ của WinSock ?
a. Không, vì sẽ làm việc gửi nhận dữ liệu
d. Không, vì sẽ làm giảm khả năng đáp ứng của socket bị chậm đi.
của chương trình với các sự kiện người
b. Không, vì sẽ làm hệ điều hành bị treo. dùng.
c. Có, vì không ảnh hưởng gì đến chương trình.
52. Trong mô hình WSAEventSelect, giả sử ứng dụng có 10 SOCKET, cần mấy đối tượng WSAEVENT tương ứng? a. 10 c. 11 b. 20 d. Số khác…
53. Đối tượng WSAEVENT được tạo ra bởi WSACreateEvent có thuộc tính: a. Signaled, auto reset c. Signaled, manual reset b. Non-signaled, auto reset
d. Non-signaled , manual reset
54. Hàm WSAWaitForMultipleEvent sẽ chặn luồng có lời gọi đến khi
a. Các đối tượng EVENT chuyển sang trạng
c. Các đối tượng EVENT chuyển sang trạng thái báo hiệu thái chưa báo hiệu b. Hết giờ d. Cả a và b
55. Giả sử s là socket dùng để kết nối đến server khác, lệnh nào sau đây thích hợp nhất.
a. WSAEventSelect(s, event, FD_ACCEPT |
c. WSAEventSelect(s, event, FD_ACCEPT| FD_CLOSE); FD_CONNECT); b. WSAEventSelect(s, event, d. WSAEventSelect(s, event, FD_CONNECT| FD_CONNECT| FD_CLOSE); FD_WRITE|FD_READ|FD_CLOSE);
56. Những hàm nào sau đây có thể sử dụng mô hình vào ra Overlapped a. WSAConnect c. WSARecv b. accept d. a và c
57. Có thể sử dụng cùng một đối tượng EVENT cho hai socket khác nhau trong mô hình Overlapped được không a. Có b. Không
58. Trong mô hình vào ra Overlapped, completion routine sẽ được gọi bởi:
a. Chương trình trong cùng luồng có yêu cầu vào ra.
b. Chương trình trong một luồng khác với luồng có yêu cầu vào ra.
c. Hệ điều hành trong luồng khác với luồng có yêu cầu vào ra.
d. Hệ điều hành trong luồng cùng với luồng có yêu cầu vào ra.
59. Alertable là trạng thái:
a. Đang ngủ và sẵn sàng thực hiện hàm callback từ hệ điều hành
b. Đang thực thi và sẵn sàng thực hiện hàm callback từ hệ điều hành
c. Đang ngủ và chưa sẵn sàng thực hiện hàm callback từ hệ điều hành
d. Đang thực thi và chưa sẵn sàng thực hiện hàm callback từ hệ điều hành
60. Hàm nào sau đây có thể đưa luồng về trạng thái alertable a. SleepEx c. Sleep b. WSAConnect d. Cả a và c 61. CSocket là lớp
a. Cơ sở của CAsyncSocket
c. Kế thừa của CAsyncSocket
b. Dẫn xuất của CAsyncSocket
d. Không có quan hệ gì với CAsyncSocket
62. Các phương thức của CSocket đều hoạt động a. Đồng bộ b. Bất đồng bộ
63. Các phương thức của CAsyncSocket đều hoạt động a. Đồng bộ b. Bất đồng bộ
64. Luồng A tạo đối tượng m có kiểu CSocket. Trong luồng B, lệnh nào sau đây là hợp lệ
a. m.Connect(“127.0.0.1”,8888); c. m.ShutDown(); b. m.Close();
d. Cả ba đều không hợp lệ.
65. Để xử lý sự kiện cho CAsyncSocket cần phải
a. Gắn đối tượng vào một biến có kiểu WSAEVENT.
b. Gắn đối tượng vào một cửa sổ qua hàm WSAAsyncSelect.
c. Truyền đối số là một hàm callback cho các thao tác vào ra.
d. Kế thừa ra một lớp mới và viết các phương thức chồng.
Đoạn chương trình sau sử dụng trong chương trình chat Voice xử lý việc nhận dữ liệu từ server, hãy điền
vào chỗ trống những lệnh cần thiết. (câu 66 đến 72) enum PACKET_TYPE { PACKET_TYPE_TEXT, PACKET_TYPE_VOICE, PACKET_TYPE_IMAGE }; struct Packet { char type; int len; char data[65536]; }; int total = 0; int len = 0; SOCKET s; Packet p;
recv(s,&p.type, ,MSG_WAITALL);
recv(s,(char*)&p.len,,MSG_WAITALL); switch (p.type) { case : while (total { len = recv(s,,,0); if (len<=0) break; total+=; }; p.data[total] = ; printf("Text:%s",p.data); … }
66. Giá trị thích hợp cho là a. 1 b. 2 c. 4 d. sizeof(p)
67. Giá trị thích hợp cho là a. 1 b. 2 c. 4 d. sizeof(Packet)
68. Giá trị thích hợp cho là a. PACKET_TYPE_VOICE b. PACKET_TYPE_IMAGE c. PACKET_TYPE_TEXT d. Giá trị khác…
69. Giá trị thích hợp cho là a. &p b. p.data c. p.data+p.len d. Phương án khác…
70. Giá trị thích hợp cho là a. p.len b. p.len – total c. total d. 65536
71. Giá trị thích hợp cho là a. len b. pk.len c. sizeof(Packet) d. 4
72. Giá trị thích hợp cho là a. 0xFF b. 0 c. 1 d. Phương án khác…
Đoạn chương trình sau đây thực hiện nhận dữ liệu từ một socket UDP và kiểm tra lại checksum, điền vào
chỗ trống những lệnh thích hợp (câu 73 đến 79) struct Packet { int offset; int len; unsigned short checksum; // XOR char data[1024]; }; Packet p; SOCKADDR_IN from; int fromLen = ; int total = 0, len;
unsigned short tmpchecksum = 0; SOCKET s; memset(&p,0,sizeof(p));
len = recvfrom(s,(char*)&p,10,0,,&fromLen); while () {
len = recvfrom(s,,,0,,&fromLen); if (len <=0 ) break; total += len; };
for (int i=0;i<(p.len+1)/2;i++)
tmpchecksum = tmpchecksum *((unsigned short*)(&p.data[])); if (tmpchecksum!=p.checksum) printf("Goi tin bi loi!");
73. Giá trị thích hợp cho là a. 1024 b. sizeof(p) c. sizeof(from) d. Phương án khác…
74. Giá trị thích hợp cho là a. true b. 1 c. total >= p.len d. total < p.len
75. Giá trị thích hợp cho là a. p.data + len b. p.data c. p.data + (p.len – total) d. Cả ba đều sai
76. Giá trị thích hợp cho là a. 1024 b. p.len – total c. p.len + total d. p.len
77. Giá trị thích hợp cho là a. &from b. sizeof(from) c. (sockaddr*)from d. (sockaddr*)&from
78. Giá trị thích hợp cho là a. ^ b. | c. & d. ~
79. Giá trị thích hợp cho là a. i*2 b. i*3 c. i*4 d. i
80. Đoạn chương trình server sau quản lý các kết nối của client dưới dạng danh sách liên kết kép. Điền vào chỗ
trống các lệnh thích hợp struct Connection { SOCKADDR_IN addr; SOCKET s; HANDLE hThread; Connection * pNext; Connection * pPrev; };
Connection * pHead = 0,*pCur = 0,*pTmp = 0; SOCKET listen; SOCKET c; SOCKADDR_IN cAddr; int
ret , cAddrLen = sizeof(cAddr); while (1) {
= accept(listen,(sockaddr*)&cAddr,); if (!pHead) { pTmp = pCur = pHead = ;
memset(pTmp,0,sizeof(Connection)); } else { pTmp = ;
memset(pTmp,0,sizeof(Connection)); pCur->pNext =; pTmp->pPrev = ; pCur = pTmp; }; pTmp->s = ;
pTmp->hThread = CreateThread(0,0,ReceiverThread,,0,0); };
Giá trị thích hợp cho là a. ret b. c c. Để trống d. pHead
81. Giá trị thích hợp cho là a. sizeof(cAddr) b. cAddrLen c. &cAddrLen d. &ret
82. Giá trị thích hợp cho là a. new Connection b. new SOCKET c. 0 d. Phương án khác…
83. Giá trị thích hơp cho là a. pTmp b. pCur c. pHead d. pHead->pNext
84. Giá trị thích hợp cho là a. pHead b. pCur c. pTmp d. pCur->pNext
85. Giá trị thích hợp cho là a. c b. listen c. 0 d. Phương án khác…
86. Giá trị thích hợp cho là a. pHead b. pCur c. pTmp d. 0
87. Đoạn chương trình sau thực hiện phân giải tên miền nhập từ bàn phím với cổng 8888 sau đó hiện các kết
quả ra màn hình, điền vào chỗ trống các lệnh thích hợp. addrinfo * info,*pCur; char host[1024]; SOCKADDR_IN addr; int ret;
printf("Nhap dia chi server:"); gets(host);
ret = getaddrinfo(host,,0,); if (ret) {
printf("Khong tim thay server"); return 0; }; pCur = info; while (pCur) {
memcpy(&addr,,pCur->ai_addrlen); printf("%s\n",); pCur = pCur->ai_next; }; freeaddrinfo(pCur);
Giá trị thích hợp cho là a. “8888” b. 8888 c. htons(8888) d. ntohs(8888);
88. Giá trị thích hợp cho là a. info b. &info c. 0 d. &addr
89. Giá trị thích hợp cho là a. info->ai_addr b. pCur c. info d. pCur->ai_addr
90. Giá trị thích hợp cho là a. inet_addr(addr.sin_addr) b. inet_ntoa(pCur)
c. inet_ntoa(pCur->sin_addr) d. inet_ntoa(addr.sin_addr)
91. Đoạn chương trình sau minh họa việc xử lý lệnh của HTTP server để phân tách URL mà client yêu cầu.
Server sẽ dừng việc nhận dữ liệu cho đến khi gặp cặp ký tự “\r\n\r\n”. Điền vào chỗ trống các lệnh thích hợp SOCKET s; char command[1024]; char url[1024]; int len = 0, ret; char *pos; while (1) {
ret = recv(s, , 1 , MSG_WAITALL); if (ret<=0) break; len += ret;
if ((command[-1]=='\n')&&(command[-2]=='\r')&&
(command[-4]=='\n')&&(command[-3]=='\r')) break; }; command[len] = 0;
if (strstr(command,"GET ")==0) printf("Unknown command");
pos = strstr(command,"HTTP/1.0"); if (pos==0)
pos = strstr(command,"HTTP/1.1"); if (pos 0) { printf("Invalid format"); return 0; }; strncpy(url,,pos-command-4); url[] = 0;
Giá trị thích hợp cho là a. command b. command+len c. command+1 d. &command
92. Giá trị thích hợp cho là a. ret b. len c. pos d. len-1
93. Giá trị thích hợp cho là a. == b. > c. < d. <=
94. Giá trị thích hợp cho là a. command b. command+4 c. command-4 d. &command+4
95. Giá trị thích hợp cho là a. pos b. pos-command c. pos-command+4 d. pos-command-4
ĐỀ THI KẾT THÚC HỌC PHẦN - 20122
Môn học: Lập trình Mạng - Mã học phần: IT4060
Thời gian làm bài: 60 phút - Sinh viên được sử dụng tài liệu
(Đề thi chỉ có 1 câu)
Câu 1: Sử dụng ngôn ngữ lập trình C/C++ hãy viết chương trình Server thực hiện các công việc sau: 1.
Tạo socket, và đợi kết nối
2. Chấp nhận kết nối từ client
3. Nhận lệnh từ client và xử lý:
a. Nếu client gửi USER: thì kiểm tra tên người dùng có hay
không, nếu không thì gửi lại cho client thông báo “No user found”, nếu có thì gửi cho
người dùng thông báo “OK”
b. Nếu client gửi PASS: thì kiểm tra
i. Nếu client chưa gửi USER trước đó thì gửi lại cho client thông báo “Please send USER first:
ii. Nếu client đã gửi USER và mật khẩu đúng với user đã gửi thì gửi lại cho client thông báo “OK”
iii. Nếu client đã gửi USER và mật khẩu sai thì gửi lại cho client thông báo “Invalid Password”
Giả định rằng tại server có một file text data.txt chứa thông tin về user và password,
mỗi cập trên một dòng.