Tải bản đầy đủ (.docx) (22 trang)

Ngân hàng câu hỏi lập trình mạng có đáp án

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (167.78 KB, 22 trang )

Ngân hàng câu hỏi thi Lập Trình Mạng
1.

Thư viện liên kết động của Windows Socket có tên là:
a.
b.

2.

Winsock.lib
WS2_32.LIB

c.
d.

WS2_32.DLL
Winsock2.dll

Wireshark
TCPView

c.
d.

Netcat
Tất cả các công cụ trên

Task Manager
Resource Monitor

c.


d.

Wireshark
Phương án a và b.

Netcat
Network Monitor
Cain

d.

Không phương án nào
đúng.

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.
b.

8.

Ws2_32.h
Ws2.h

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.
b.
c.


7.

c.
d.

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.
b.

6.

Winsock.h
Winsock2.h

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.
b.

5.

WS2.DLL
WS2_32.DLL

Để 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.
b.


4.

c.
d.

Để có thể sử dụng thư viện Windows Socket, tệp tiêu đề cần khai báo là:
a.
b.

3.

WinSock.DLL
WinSock2.DLL

Netcat
TCPDump

c.
d.

Netstat
Network Monitor

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.
b.

TCP
IP


c.
d.

ICMP
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.
b.

10.

DMZ
Virtual Server

c.
d.

Port Forwarding
Cả ba phương án trên.

Ping
Nslookup

c.
d.


Netstat
Ipconfig

Application
Provider

c.
d.

Transport Protocol
Không tầng nào đúng

Application
Provider

c.
d.

Transport Protocol
Không tầng nào đúng.

Trình điều khiển cho một thiết bị mạng chạy ở chế độ
a.
b.
c.

16.

NAT

Không đáp án nào đúng

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.
b.

15.

c.
d.

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.
b.

14.

VLAN
MAC

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.
b.

13.

Internetwork

Datalink

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.
b.

12.

c.
d.

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.
b.

11.

Application
Transport

User Mode
Kernel Mode
System Mode

d.

Không phương án nào

đúng.

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.
b.

18.

WSStartup
WinsockStartup

c.
d.


SocketStartup
WSAStartup

b.

Nhận thông tin về phiên
bản WinSock có trên hệ
thống.
Cả hai đáp án đều sai.

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

c.
19.

Hàm nào sau đây sử dụng để giải phóng Windows Socket API.
a.
b.

20.

WSACleanup
WSCleanup

c.

d.

Cleanup
Phương án khác:…

Để 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.
b.

GetLastError
WSAGetError

c.
d.

WSAGetLastError
WSALastError

Đ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.
22. ret = connect(s, (sockaddr*)&serverAddr,sizeof(serverAddr));
23. if (ret ==SOCKET_ERROR) {
24.
printf(“Loi ket noi: %d”, <A>);
25.
<B>;
26.
<C>;
27. };

21.

a.

b.

28.

c.

d.

<A>: WSALastError(),
<B>: closesocket(s), <C>:
để trống.
Không phương án nào
đúng.

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.
b.

29.

<A>: GetLastError, <B>:
closesocket (s), <C>:
WSACleanup().
<A>:
WSAGetLastError(), <B>

close(s), <C>: Cleanup().

Thành công
Thất bại

c.

Lệnh nào sau đây dùng để tạo một socket TCP

Tùy trường hợp


a.
b.

30.

b.

b.

b.

sock_addr
sockaddr

c.
d.

sockaddr_in

sock_addr_in

Đầu to
Đầu nhỏ

c.

Tùy trường hợp

inet_ntoa(“192.168.1.1”)
;
inet_aton(“192.168.1.1”)
;

c.
d.

inet_addr(“192.168.1.1”)
;
inet_stoi(“192.168.1.1”);

inet_ntos(serverAddr.sin
_addr);
inet_ntoa(serverAddr.s_a
ddr);

c.
d.

inet_itos(serverAddr.sin_

addr);
inet_ntoa(serverAddr.sin
_addr);

Để 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.
b.

36.

d.

Socket(AF_INET,SOCK_S
TREAM,IPPROTO_UDP).
Không lệnh nào đúng.

Để 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.

35.

c.

Để chuyển đổi một xâu sang địa chỉ IP, lệnh nào sau đây là đúng
a.

34.


socket(AF_INET,SOCK_U
DP, IPPROTO_TCP).
socket(AF_INET,SOCK_D
GRAM,IPROTO_TCP).

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.
b.

33.

d.

Socket(AF_INET,SOCK_S
TREAM,IPPROTO_UDP).
socket(AF_INET,SOCKST
REAM,IPPROTOTCP).

Cấu trúc nào được sử dụng để khai báo địa chỉ socket internet:
a.
b.

32.

c.

Lệnh nào sau đây dùng để tạo một socket UDP
a.


31.

socket(AF_INET,SOCK_ST
REAM,IPPROTO_TCP).
socket(AF_INET,SOCK_D
GRAM,IPROTO_TCP).

ntohl
ntohs

c.
d.

htonl
htons

Để 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.
37.


getpeerinfo
Cả ba hàm trên

<A>: Mảng, <B> delete
<A>: Danh sách liên kết
đơn, <B> free

c.
d.

<A>: Danh sách liên kết
kép, <B> freeaddrinfo
<A>: Danh sách liên kết
đơn, <B> freeaddrinfo

ai_addr.
sock_addr.

c.
d.

addr.
in_addr.

Tường lửa chặn.
Đã có ứng dụng khác mở
sử dụng cổng trên.

c.
d.


Socket không hợp lệ.
Cả ba trường hợp trên.

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.

b.

42.

c.
d.

Trong trường hợp nào sau đây hàm bind sẽ thất bại
a.
b.

41.

getaddrinfo
gethostinfo

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.
b.

40.


Ws2tcpip.h

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.
b.

39.

d.

Để 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.
b.

38.

Ws2ip.h

bind(s,
(sockaddr_in*)&serverA
ddr, sizeof(serverAddr));
bind(s,
(sockaddr*)serverAddr,si
zeof(serverAddr));

c.


d.

bind(s,
(sockaddr*)&serverAddr,
sizeof(sockaddr_in));
Không lệnh nào đúng.

Lệnh nào sau đây sẽ gán giá trị cổng 8080 cho cấu trúc địa chỉ
serverAddr.
a.
b.

serverAddr.sin_port =
8080.
serverAddr.s_port =
8080.

c.
d.

serverAddr.sin_port =
htonl(8080).
Lệnh khác…


Đ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
44. SOCKET
server,client;
45. sockaddr_in

clientAddr;
46. int
len;
47. len = <A>;
48. client = accept(server,<B>, <C>);
43.

a.
b.
c.

<A> = 0, <B> = clientAddr,
<C> = len.
<A> = sizeof(client), <B> =
&clientAddr, <C> =len.
<A> = 0, <B> =
(sockaddr*)&clientAddr,
<C> = &len.

d.

<A> = sizeof(clientAddr),
<B> =
(sockaddr*)&clientAddr,&le
n.

Đ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.
50. char str[1024];
51. int

ret = 0;
52. gets(str);
53. <A> = send(s,str,<B>,0);
54. if (<A> <= 0)
55. {
56.
printf("Loi gui xau!");
57.
<C>;
58. }
49.

a.
b.

59.

c.

d.

<A> = str, <B> =
strlen(str), <C> =
close(s).
<A> = ret, <B> =
strlen(str), <C> =
closesocket(s).

Trong lời gọi hàm recv(s,buff,1024,0), giá trị 1024 có nghĩa là:
a.

b.

60.

<A> = ret, <B> = 1024,
<C> = để trống.
<A> = ret, <B> =
sizeof(str), <C> =
close(s).

Số byte muốn nhận
Số byte tối đa muốn
nhận.

c.
d.

Kích thước bộ đệm.
Cả b và c đều đúng.

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.
c.

61.

b.

Không chặn luồng nào
cả.

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
Chặn tất cả các luồng
trừ luồng chứa lời gọi

c.

d.

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.
Không chặn luồng nào
cả.

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.

b.

63.

d.

Khi socket hoạt động ở chế độ bất đồng bộ, mỗi lời gọi hàm sẽ
a.

62.

Chặn tất cả các luồng
trừ luồng chứa lời gọi
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.

<A>: đồng bộ, <B>:
ioctlsocket.
<A>: bất đông bộ,
<B>:ioctlsocket.

c.
d.

<A>: đồng bộ, <B>:
WSAAsyncSelect.
Cả a và c đều đúng



64.

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.

b.

65.

100
200

c.
d.

201
101

readfds
writefds

c.
d.

exceptfds
Cả ba tập đều được.

100
2


c.
d.

101
1.

Đồng bộ
Bất đồng bộ

c.

Không xác định

Hàm callback WindowProc được gọi trong ngữ cảnh của:
a.
b.

71.

20
21

Trong mô hình Select, socket chạy ở chế độ nào ?
a.
b.

70.

c.

d.

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.
b.

69.

11
10

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.
b.

68.

Kết nối bị đóng.
Cả ba phương án trên
đều đúng.

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.
b.

67.


c.
d.

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.
b.

66.

Có dữ liệu từ bộ đệm hệ
thống nhưng không đủ
1024 byte.
Có đủ 1024 byte dữ liệu
từ bộ đệm hệ thống.

Một luồng riêng được hệ
thống tạo ra.
Luồng chính xử lý giao
diện.

c.
d.

Luồng phụ do chương
trình tạo ra.
Phương án khác…

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.

b.

72.

b.

b.

11
Số khác…

Signaled, auto reset
Non-signaled, auto reset
Signaled, manual reset

d.

Non-signaled , manual
reset

Các đối tượng EVENT
chuyển sang trạng thái
báo hiệu
Hết giờ


c.

d.

Các đối tượng EVENT
chuyển sang trạng thái
chưa báo hiệu
Cả a và b

WSAEventSelect(s,
event, FD_ACCEPT |
FD_CLOSE);
WSAEventSelect(s,
event, FD_CONNECT|
FD_WRITE|FD_READ|
FD_CLOSE);

c.

d.

WSAEventSelect(s,
event, FD_ACCEPT|
FD_CONNECT);
WSAEventSelect(s,
event, FD_CONNECT|
FD_CLOSE);

Những hàm nào sau đây có thể sử dụng mô hình vào ra Overlapped
a.

b.

77.

c.
d.

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.

76.

10
20

Hàm WSAWaitForMultipleEvent sẽ chặn luồng có lời gọi đến khi
a.

75.

d.

Có, vì không ảnh hưởng
gì đến chương trình.
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.


Đối tượng WSAEVENT được tạo ra bởi WSACreateEvent có thuộc tính:
a.
b.
c.

74.

c.

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.
b.

73.

Không, vì sẽ làm việc gửi
nhận dữ liệu của socket
bị chậm đi.
Không, vì sẽ làm hệ điều
hành bị treo.

WSAConnect
accept

c.
d.

WSARecv
a và c


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


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.
79. 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
80. Hàm nào sau đây có thể đưa luồng về trạng thái alertable
78.

a.

b.
81.

c.

Kế thừa của
CAsyncSocket
Không có quan hệ gì với
CAsyncSocket

d.

Đồng bộ

b.

Bất đồng bộ

Đồng bộ

b.

Bất đồng bộ

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.
b.

85.


Cơ sở của CAsyncSocket
Dẫn xuất của
CAsyncSocket

Các phương thức của CAsyncSocket đều hoạt động
a.

84.

Sleep
Cả a và c

Các phương thức của CSocket đều hoạt động
a.

83.

c.
d.

CSocket là lớp
a.
b.

82.

SleepEx
WSAConnect


m.Connect(“127.0.0.1”,88
88);
m.Close();

c.
d.

m.ShutDown();
Cả ba đều không hợp lệ.

Để 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.


86.

Đ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.
87.
88.
89.
90.
91.
92.

93.


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

{
len = recv(s,<D>,<E>,0);
if (len<=0) break;
total+=<F>;
};
p.data[total] = <G>;
printf("Text:%s",p.data);

}
Giá trị thích hợp cho <A> là
94.
95.
96.
97.
98.
99.

100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.

113.
114.
115.
116.
117.
118.
119.
a.

1

120.
a.
b.
c.
d.
121.
a.
b.
c.
d.
122.
a.
b.
c.

b.

2


Giá trị thích hợp cho <B> là
1
2
4
sizeof(Packet)
Giá trị thích hợp cho <C> là
PACKET_TYPE_VOICE
PACKET_TYPE_IMAGE
PACKET_TYPE_TEXT
Giá trị khác…
Giá trị thích hợp cho <D> là
&p
p.data
p.data+p.len

c.

4

d.

sizeof(p)


Phương án khác…
123.
Giá trị thích hợp cho <E> là
a. p.len
b. p.len – total
c. total

d. 65536
124.
Giá trị thích hợp cho <F> là
a. len
b. pk.len
c. sizeof(Packet)
d. 4
125.
Giá trị thích hợp cho <G> là
a. 0xFF
b. 0
c. 1
d. Phương án khác…
126.
Đ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
127.
struct Packet
128.
{
129.
int
offset;
130.
int
len;
131.
unsigned short
checksum; // XOR
132.

char data[1024];
133.
};
134.
Packet
p;
135.
SOCKADDR_IN
from;
136.
int
fromLen = <A>;
137.
int
total = 0, len;
138.
unsigned short
tmpchecksum = 0;
139.
SOCKET
s;
140.
memset(&p,0,sizeof(p));
141.
len = recvfrom(s,(char*)&p,10,0,<E>,&fromLen);
142.
while (<B>)
143.
{
144.

len = recvfrom(s,<C>,<D>,0,<E>,&fromLen);
145.
if (len <=0 ) break;
146.
total += len;
147.
};
148.
for (int i=0;i<(p.len+1)/2;i++)
149.
tmpchecksum = tmpchecksum <F> *((unsigned
short*)(&p.data[<G>]));
d.


if (tmpchecksum!=p.checksum)
printf("Goi tin bi loi!");
Giá trị thích hợp cho
<A> là
a. 1024
b. sizeof(p)
c. sizeof(from)
d. Phương án khác…
153.
Giá trị thích hợp cho <B> là
a. true
b. 1
c. total >= p.len
d. total < p.len
154.

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
155.
Giá trị thích hợp cho <D> là
a. 1024
b. p.len – total
c. p.len + total
d. p.len
156.
Giá trị thích hợp cho <E> là
a. &from
b. sizeof(from)
c. (sockaddr*)from
d. (sockaddr*)&from
157.
Giá trị thích hợp cho <F> là
a. ^
b. |
c. &
d. ~
158.
Giá trị thích hợp cho <G> là
a. i*2
b. i*3
c. i*4
d. i
159.

Đ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
160.
struct Connection
161.
{
162.
SOCKADDR_IN
addr;
150.
151.
152.


163.
164.
165.
166.
167.
168.

SOCKET
s;
HANDLE hThread;
Connection * pNext;
Connection * pPrev;

};
Connection *
pHead = 0,*pCur = 0,*pTmp = 0;

169.
SOCKET
listen;
170.
SOCKET
c;
171.
SOCKADDR_IN
cAddr;
172.
int
ret , cAddrLen = sizeof(cAddr);
173.
while (1)
174.
{
175.
<A> = accept(listen,(sockaddr*)&cAddr,<B>);
176.
if (!pHead)
177.
{
178.
pTmp = pCur = pHead = <C>;
179.
memset(pTmp,0,sizeof(Connection));
180.
}
181.
else

182.
{
183.
pTmp = <C>;
184.
memset(pTmp,0,sizeof(Connection));
185.
pCur->pNext =<D>;
186.
pTmp->pPrev = <E>;
187.
pCur = pTmp;
188.
};
189.
pTmp->s = <F>;
190.
pTmp->hThread =
CreateThread(0,0,ReceiverThread,<G>,0,0);
191.
192.
193.
a.
b.
c.
d.
194.
a.
b.
c.

d.
195.

};
Giá trị thích hợp cho <A> là
ret
c
Để trống
pHead
Giá trị thích hợp cho <B> là
sizeof(cAddr)
cAddrLen
&cAddrLen
&ret
Giá trị thích hợp cho <C> là


new Connection
new SOCKET
0
Phương án khác…
196.
Giá trị thích hơp cho <D> là
a. pTmp
b. pCur
c. pHead
d. pHead->pNext
197.
Giá trị thích hợp cho <E> là
a. pHead

b. pCur
c. pTmp
d. pCur->pNext
198.
Giá trị thích hợp cho <F> là
a. c
b. listen
c. 0
d. Phương án khác…
199.
Giá trị thích hợp cho <G> là
a. pHead
b. pCur
c. pTmp
d. 0
200.
Đ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.
201.
addrinfo
* info,*pCur;
202.
char
host[1024];
203.
SOCKADDR_IN
addr;
204.
int

ret;
205.
printf("Nhap dia chi server:");
206.
gets(host);
207.
ret = getaddrinfo(host,<A>,0,<B>);
208.
if (ret)
209.
{
210.
printf("Khong tim thay server");
211.
return 0;
212.
};
213.
pCur = info;
214.
while (pCur)
215.
{
a.
b.
c.
d.


216.

217.
218.
219.
220.

memcpy(&addr,<C>,pCur->ai_addrlen);
printf("%s\n",<D>);
pCur = pCur->ai_next;

};
Giá trị thích hợp cho <A> là
a. “8888”
b. 8888
c. htons(8888)
d. ntohs(8888);
221.
Giá trị thích hợp cho <B> là
a. info
b. &info
c. 0
d. &addr
222.
Giá trị thích hợp cho <C> là
a. info->ai_addr
b. pCur
c. info
d. pCur->ai_addr
223.
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. Phương án khác…
224.
Đ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
225.
SOCKET
s;
226.
char command[1024];
227.
char url[1024];
228.
int len = 0, ret;
229.
char *pos;
230.
while (1)
231.
{
232.
ret = recv(s, <A> , 1 , MSG_WAITALL);
233.
if (ret<=0) break;
234.
len += ret;
235.

if ((command[<B>-1]=='\n')&&(command[<B>2]=='\r')&&
236.
(command[<B>-4]=='\n')&&(command[<B>3]=='\r'))


break;

237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
a.
b.
c.
d.
253.
a.
b.

c.
d.
254.
a.
b.
c.
d.
255.
a.
b.
c.
d.
256.
a.
b.
c.
d.

};
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à
command
command+len
command+1
&command
Giá trị thích hợp cho <B> là
ret
len
pos
len-1
Giá trị thích hợp cho <C> là
==
>
<
<=
Giá trị thích hợp cho <D> là
command
command+4
command-4
&command+4
Giá trị thích hợp cho <E> là
pos
pos-command
pos-command+4
pos-command-4
257.
258.



259.


260.
261.

ĐÁP ÁN MÔN
262. LẬP TRÌNH MẠNG

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
263.

264.

217

265.
266.
Đáp án đề 217

267.
268.

269.

270.


271.

272.

273.

274.

275.

276.

277.

278.

279.

280.

281.

282.

1

2

3


4

5

6

7

8

9

10

11

12

13

14

15

283.

284.

285.


286.

287.

288.

289.

290.

291.

292.

293.

294.

295.

296.

297.

d

d

b


b

d

b

d

b

a

a

c

d

c

b

b

298.

299.

300.


301.

302.

303.

304.

305.

306.

307.

308.

309.

310.

311.

312.

16

17

18


19

20

21

22

23

24

25

26

27

28

29

30

313.

314.

315.


316.

317.

318.

319.

320.

321.

322.

323.

324.

325.

326.

327.

b

d

b


d

b

c

c

a

d

d

c

a

c

a

d

328.

329.

330.


331.

332.

333.

334.

335.

336.

337.

338.

339.

340.

341.

342.

31

32

33


34

35

36

37

38

39

40

41

42

43

44

45

343.

344.

345.


346.

347.

348.

349.

350.

351.

352.

d

a

c

a

b

a

d

d
358.


a

b

353. 354. 355. 356. 357.

Đáp án đề 515

359.
360.

361.

362.

363.

364.

365.

366.

367.

368.

369.


370.

371.

372.

373.

374.

1

2

3

4

5

6

7

8

9

10


11

12

13

14

15

375.

376.

377.

378.

379.

380.

381.

382.

383.

384.


385.

386.

387.

388.

389.

d

b

b

d

b

a

d

a

c

d


b

c

b

b

b

390.

391.

392.

393.

394.

395.

396.

397.

398.

399.


400.

401.

402.

403.

404.

16

17

18

19

20

21

22

23

24

25


26

27

28

29

30

405.

406.

407.

408.

409.

410.

411.

412.

413.

414.


415.

416.

417.

418.

419.

d

b

a

c

d

a

a

d

c

a


c

d

d

d

d

420.

421.

422.

423.

424.

425.

426.

427.

428.

429.


430.

431.

432.

433.

434.

31

32

33

34

35

36

37

38

39

40


41

42

43

44

45

435.

436.

437.

438.

439.

440.

441.

442.

443.

444.


a

d

d

a

b

d

a

c

a

b

450.

451.

445. 446. 447. 448. 449.


452.
453.
a)



b)
c)
d)
e)
f)
g)



×