Trắc nghiệm Mạng máy tính Bài: Lập trình socket với ngôn ngữ C Trắc nghiệm Mạng máy tính Bài: Lập trình socket với ngôn ngữ C 25 câu hỏi 30 phút Mạng máy tínhBẮT ĐẦU LÀM BÀITrắc nghiệm Mạng máy tính Bài: Lập trình socket với ngôn ngữ C 25 câu hỏi 30 phút Mạng máy tínhPHẦN I. Câu trắc nghiệm nhiều phương án lựa chọn.Câu 1Nhận biếtHàm `socket()` trong C dùng để làm gì?A.Kết nối đến một địa chỉ IP.B.Gán một địa chỉ và cổng cho socket.C.Lắng nghe các kết nối đến.D.Tạo một điểm cuối truyền thông (socket) và trả về một bộ mô tả tệp (file descriptor). Lát kiểm tra lại 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?A.UDP (User Datagram Protocol).B.ICMP (Internet Control Message Protocol).C.ARP (Address Resolution Protocol).D.TCP (Transmission Control Protocol). Lát kiểm tra lại 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?A.TCP (Transmission Control Protocol).B.HTTP (Hypertext Transfer Protocol).C.FTP (File Transfer Protocol).D.UDP (User Datagram Protocol). Lát kiểm tra lại Câu 4Nhận biếtCấ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ủ.B.Tên miền của máy chủ.C.Cấu hình mạng của card mạng.D.Địa chỉ IPv4 và số cổng (port) của socket. Lát kiểm tra lại Câu 5Nhận biếtCác hàm như `htons()` và `htonl()` trong lập trình socket C được sử dụng cho mục đích gì?A.Chuyển đổi địa chỉ IP từ chuỗi sang số nguyên.B.Chuyển đổi địa chỉ MAC sang địa chỉ IP.C.Mã hóa dữ liệu trước khi truyền.D.Chuyển đổi thứ tự byte từ host byte order sang network byte order (Big-endian). Lát kiểm tra lại Câu 6Nhận biếtHàm `bind()` trong lập trình socket C dùng để làm gì?A.Thiết lập kết nối đến một server.B.Chờ đợi các kết nối đến.C.Gửi dữ liệu qua socket.D.Gán một địa chỉ IP và số cổng cụ thể cho socket vừa tạo. Lát kiểm tra lại Câu 7Nhận biếtNế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ì?A.Server chỉ lắng nghe từ localhost.B.Server sẽ kết nối đến một địa chỉ IP ngẫu nhiên.C.Server sẽ chỉ lắng nghe từ một địa chỉ IP cụ thể.D.Server 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. Lát kiểm tra lại Câu 8Nhận biếtHàm `listen()` trong lập trình socket C có đối số `backlog` dùng để làm gì?A.Xá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.C.Số lượng client đã kết nối thành công.D.Chỉ định số lượng kết nối đang chờ xử lý (pending connections) mà server có thể giữ trong hàng đợi. Lát kiểm tra lại Câu 9Nhận biếtHàm `accept()` trong lập trình socket C dùng để làm gì trong vai trò server?A.Bắt đầu lắng nghe các kết nối.B.Gửi dữ liệu đến client.C.Đóng kết nối.D.Chờ đợ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 đó. Lát kiểm tra lại Câu 10Nhận biếtHàm `connect()` trong lập trình socket C dùng để làm gì trong vai trò client?A.Gán địa chỉ IP và cổng cho client socket.B.Chờ đợi kết nối từ server.C.Gửi dữ liệu đến server.D.Thiết lập kết nối đến một server đã lắng nghe trên địa chỉ IP và cổng cụ thể. Lát kiểm tra lại 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()` Lát kiểm tra lại 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()` Lát kiểm tra lại 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()` Lát kiểm tra lại 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()` Lát kiểm tra lại Câu 15Nhận biếtSau 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()` Lát kiểm tra lại Câu 16Nhận biếtKhi một hàm socket trả về giá trị -1, điều đó thường có nghĩa là gì?A.Hoạt động thành công.B.Hoạt động đang chờ xử lý.C.Khô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`. Lát kiểm tra lại Câu 17Nhận biếtHàm `perror()` trong C được sử dụng để làm gì?A.Ghi lỗi vào một tệp nhật ký.B.Báo cáo lỗi mạng cho hệ thống.C.Hiển thị thông báo lỗi tùy chỉnh.D.In 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. Lát kiểm tra lại 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()` Lát kiểm tra lại Câu 19Nhận biếtCờ `SO_REUSEADDR` thường được đặt cho server socket bằng hàm `setsockopt()`. Mục đích của nó là gì?A.Tăng tốc độ truyền dữ liệu.B.Giảm bộ nhớ sử dụng.C.Cho phép nhiều ứng dụng cùng lắng nghe trên một cổng.D.Cho 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`. Lát kiểm tra lại Câu 20Nhận biếtCấ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?A.IPv4.B.IPv4 và IPv6.C.IPX.D.IPv6. Lát kiểm tra lại 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) Lát kiểm tra lại 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) Lát kiểm tra lại Câu 23Nhận biếtLà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?A.Hàm `recv()` trả về -1.B.Hàm `recv()` gây lỗi.C.Hàm `recv()` trả về một giá trị lớn hơn 0.D.Hàm `recv()` trả về 0. Lát kiểm tra lại Câu 24Nhận biếtNế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()` Lát kiểm tra lại Câu 25Nhận biếtCá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.``, ``, ``. Lát kiểm tra lại Số câu đã làm0/25|Thời gian còn lại--:--NỘP BÀI