0/25 câu 15:00

Trắc nghiệm Mạng máy tính Bài: Lập trình socket với ngôn ngữ C

Lập trình socket bằng C là nền tảng quan trọng trong môn Mạng máy tính, chiếm tới 20% điểm thi đại học và là tiêu chí đánh giá năng lực thực tế của sinh viên. Bộ đề 25 câu, thời gian 15 phút, được thiết kế chuẩn cấu trúc đề thi, giúp bạn ôn tập lý thuyết, luyện bài tập trắc nghiệm và xem giải chi tiết ngay trên nền tảng HocMai Miễn Phí. Tham gia ngay để làm test trực tiếp, chấm điểm tự động và nhận lời giải toàn diện, tối ưu hoá kết quả thi của bạn.

25 câu hỏi
15 phút
Phạm vi: kiểm tra: Mạng máy tính Bài: Lập trình socket với ngôn ngữ C
Đại học

Câu 1Nhận biết

Hàm `socket()` trong C dùng để làm gì?
  • AKết nối đến một địa chỉ IP.
  • BGán một địa chỉ và cổng cho socket.
  • CLắng nghe các kết nối đến.
  • DTạo một điểm cuối truyền thông (socket) và trả về một bộ mô tả tệp (file descriptor).

Câu 2Nhận biết

Đối số `type` trong hàm `socket()` được đặt là `SOCK_STREAM` khi bạn muốn sử dụng giao thức tầng giao vận nào?
  • AUDP (User Datagram Protocol).
  • BICMP (Internet Control Message Protocol).
  • CARP (Address Resolution Protocol).
  • DTCP (Transmission Control Protocol).

Câu 3Nhận biết

Đối số `type` trong hàm `socket()` được đặt là `SOCK_DGRAM` khi bạn muốn sử dụng giao thức tầng giao vận nào?
  • ATCP (Transmission Control Protocol).
  • BHTTP (Hypertext Transfer Protocol).
  • CFTP (File Transfer Protocol).
  • DUDP (User Datagram Protocol).

Câu 4Nhận biết

Cấu trúc dữ liệu `struct sockaddr_in` trong lập trình socket C dùng để lưu trữ thông tin gì?
  • AĐịa chỉ MAC của máy chủ.
  • BTên miền của máy chủ.
  • CCấu hình mạng của card mạng.
  • DĐịa chỉ IPv4 và số cổng (port) của socket.

Câu 5Nhận biết

Các hàm như `htons()` và `htonl()` trong lập trình socket C được sử dụng cho mục đích gì?
  • AChuyển đổi địa chỉ IP từ chuỗi sang số nguyên.
  • BChuyển đổi địa chỉ MAC sang địa chỉ IP.
  • CMã hóa dữ liệu trước khi truyền.
  • DChuyển đổi thứ tự byte từ host byte order sang network byte order (Big-endian).

Câu 6Nhận biết

Hàm `bind()` trong lập trình socket C dùng để làm gì?
  • AThiết lập kết nối đến một server.
  • BChờ đợi các kết nối đến.
  • CGửi dữ liệu qua socket.
  • DGán một địa chỉ IP và số cổng cụ thể cho socket vừa tạo.

Câu 7Nhận biết

Nếu một server socket trong C sử dụng `INADDR_ANY` làm địa chỉ IP khi gọi `bind()`, điều đó có nghĩa là gì?
  • AServer chỉ lắng nghe từ localhost.
  • BServer sẽ kết nối đến một địa chỉ IP ngẫu nhiên.
  • CServer sẽ chỉ lắng nghe từ một địa chỉ IP cụ thể.
  • DServer sẽ lắng nghe trên tất cả các giao diện mạng khả dụng của máy tính.

Câu 8Nhận biết

Hàm `listen()` trong lập trình socket C có đối số `backlog` dùng để làm gì?
  • AXác định kích thước tối đa của gói tin.
  • BĐặt thời gian chờ cho các kết nối.
  • CSố lượng client đã kết nối thành công.
  • DChỉ định số lượng kết nối đang chờ xử lý (pending connections) mà server có thể giữ trong hàng đợi.

Câu 9Nhận biết

Hàm `accept()` trong lập trình socket C dùng để làm gì trong vai trò server?
  • ABắt đầu lắng nghe các kết nối.
  • BGửi dữ liệu đến client.
  • CĐóng kết nối.
  • DChờ đợi và chấp nhận một kết nối đến từ client, sau đó trả về một bộ mô tả tệp cho socket mới để giao tiếp với client đó.

Câu 10Nhận biết

Hàm `connect()` trong lập trình socket C dùng để làm gì trong vai trò client?
  • AGán địa chỉ IP và cổng cho client socket.
  • BChờ đợi kết nối từ server.
  • CGửi dữ liệu đến server.
  • DThiết lập kết nối đến một server đã lắng nghe trên địa chỉ IP và cổng cụ thể.

Câu 11Nhận biết

Để gửi dữ liệu qua một socket TCP đã kết nối trong C, bạn sẽ sử dụng hàm nào?
  • A`read()`
  • B`recvfrom()`
  • C`writev()`
  • D`send()`

Câu 12Nhận biết

Để nhận dữ liệu qua một socket TCP đã kết nối trong C, bạn sẽ sử dụng hàm nào?
  • A`write()`
  • B`sendto()`
  • C`readv()`
  • D`recv()`

Câu 13Nhận biết

Để gửi dữ liệu qua một socket UDP trong C, bạn sẽ sử dụng hàm nào?
  • A`send()`
  • B`recv()`
  • C`read()`
  • D`sendto()`

Câu 14Nhận biết

Để nhận dữ liệu qua một socket UDP trong C, bạn sẽ sử dụng hàm nào?
  • A`recv()`
  • B`send()`
  • C`write()`
  • D`recvfrom()`

Câu 15Nhận biết

Sau khi hoàn thành việc giao tiếp, hàm nào nên được gọi để đóng socket và giải phóng tài nguyên hệ thống?
  • A`shutdown()`
  • B`release()`
  • C`disconnect()`
  • D`close()`

Câu 16Nhận biết

Khi một hàm socket trả về giá trị -1, điều đó thường có nghĩa là gì?
  • AHoạt động thành công.
  • BHoạt động đang chờ xử lý.
  • CKhông có dữ liệu để gửi.
  • DĐã xảy ra lỗi, và chi tiết lỗi có thể được truy cập thông qua biến toàn cục `errno`.

Câu 17Nhận biết

Hàm `perror()` trong C được sử dụng để làm gì?
  • AGhi lỗi vào một tệp nhật ký.
  • BBáo cáo lỗi mạng cho hệ thống.
  • CHiển thị thông báo lỗi tùy chỉnh.
  • DIn ra một thông báo lỗi mô tả lỗi cuối cùng đã xảy ra trong thư viện hệ thống hoặc hàm thư viện C.

Câu 18Nhận biết

Để một server C có thể xử lý nhiều client đồng thời, cách phổ biến nhất để tạo các tiến trình con là sử dụng hàm nào?
  • A`pthread_create()`
  • B`exec()`
  • C`wait()`
  • D`fork()`

Câu 19Nhận biết

Cờ `SO_REUSEADDR` thường được đặt cho server socket bằng hàm `setsockopt()`. Mục đích của nó là gì?
  • ATăng tốc độ truyền dữ liệu.
  • BGiảm bộ nhớ sử dụng.
  • CCho phép nhiều ứng dụng cùng lắng nghe trên một cổng.
  • DCho phép socket lắng nghe lại trên một cổng đã sử dụng gần đây mà không cần chờ timeout `TIME_WAIT`.

Câu 20Nhận biết

Cấu trúc `struct sockaddr_in6` được sử dụng để lưu trữ thông tin địa chỉ cho phiên bản giao thức IP nào?
  • AIPv4.
  • BIPv4 và IPv6.
  • CIPX.
  • DIPv6.

Câu 21Nhận biết

Để chuyển đổi một địa chỉ IP dạng chuỗi (ví dụ: “192.168.1.1”) sang định dạng nhị phân trong cấu trúc địa chỉ socket, bạn sẽ sử dụng hàm nào?
  • A`inet_ntoa()`
  • B`inet_addr()`
  • C`gethostbyname()`
  • D`inet_pton()` (cho IPv4 và IPv6)

Câu 22Nhận biết

Để chuyển đổi một địa chỉ IP dạng nhị phân trong cấu trúc địa chỉ socket sang dạng chuỗi dễ đọc, bạn sẽ sử dụng hàm nào?
  • A`inet_aton()`
  • B`inet_pton()`
  • C`gethostbyaddr()`
  • D`inet_ntop()` (cho IPv4 và IPv6)

Câu 23Nhận biết

Làm thế nào để bạn biết một socket TCP đã đọc hết dữ liệu từ bên đối diện và bên đó đã đóng kết nối?
  • AHàm `recv()` trả về -1.
  • BHàm `recv()` gây lỗi.
  • CHàm `recv()` trả về một giá trị lớn hơn 0.
  • DHàm `recv()` trả về 0.

Câu 24Nhận biết

Nếu bạn muốn server tạo một luồng (thread) mới cho mỗi client kết nối thay vì một tiến trình (process) mới, bạn sẽ sử dụng hàm nào?
  • A`fork()`
  • B`exec()`
  • C`wait()`
  • D`pthread_create()`

Câu 25Nhận biết

Các tệp tiêu đề (header files) cơ bản nào là cần thiết cho hầu hết các chương trình lập trình socket trong C?
  • A“, “.
  • B“, “.
  • C“, “.
  • D“, “, “.

Đã trả lời 0/25 câu