C++ 语言 计算机网络面试题解答示例

C++阿木 发布于 2025-06-14 11 次阅读


C++ 网络编程面试题解答示例

在计算机网络领域,C++ 语言因其高性能和灵活性而被广泛应用于网络编程。以下是一篇关于 C++ 网络编程面试题解答的示例文章,旨在帮助读者准备面试,并加深对网络编程的理解。

计算机网络是现代信息技术的基础,而 C++ 作为一种高性能编程语言,在网络编程领域有着广泛的应用。本文将围绕 C++ 网络编程面试题,通过示例代码进行解答,帮助读者掌握网络编程的核心概念和技术。

一、基础网络编程

1.1 创建套接字

cpp
include
include
include
include

int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
std::cerr << "Socket creation failed!" << std::endl;
return -1;
}
std::cout << "Socket created successfully!" << std::endl;
close(sockfd);
return 0;
}

1.2 绑定地址和端口

cpp
include
include
include
include

int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
std::cerr << "Socket creation failed!" << std::endl;
return -1;
}

struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080);
servaddr.sin_addr.s_addr = INADDR_ANY;

if (bind(sockfd, (struct sockaddr )&servaddr, sizeof(servaddr)) < 0) {
std::cerr << "Bind failed!" << std::endl;
return -1;
}
std::cout << "Bind successful!" << std::endl;
close(sockfd);
return 0;
}

1.3 监听和接受连接

cpp
include
include
include
include
include

int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
std::cerr << "Socket creation failed!" << std::endl;
return -1;
}

struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080);
servaddr.sin_addr.s_addr = INADDR_ANY;

if (bind(sockfd, (struct sockaddr )&servaddr, sizeof(servaddr)) < 0) {
std::cerr << "Bind failed!" << std::endl;
return -1;
}

listen(sockfd, 10);
std::cout << "Listening for connections..." << std::endl;

int newsockfd;
socklen_t clilen = sizeof(struct sockaddr_in);
newsockfd = accept(sockfd, (struct sockaddr )&clilen, NULL);
if (newsockfd < 0) {
std::cerr << "Accept failed!" << std::endl;
return -1;
}
std::cout << "Connection accepted!" << std::endl;

close(sockfd);
return 0;
}

二、高级网络编程

2.1 TCP客户端

cpp
include
include
include
include
include

int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
std::cerr << "Socket creation failed!" << std::endl;
return -1;
}

struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

if (connect(sockfd, (struct sockaddr )&servaddr, sizeof(servaddr)) < 0) {
std::cerr << "Connect failed!" << std::endl;
return -1;
}
std::cout << "Connected to server!" << std::endl;

const char message = "Hello, server!";
send(sockfd, message, strlen(message), 0);
std::cout << "Message sent!" << std::endl;

char buffer[1024] = {0};
int n = read(sockfd, buffer, 1024);
std::cout << "Received: " << buffer << std::endl;

close(sockfd);
return 0;
}

2.2 UDP客户端

cpp
include
include
include
include
include

int main() {
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
std::cerr << "Socket creation failed!" << std::endl;
return -1;
}

struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

const char message = "Hello, server!";
sendto(sockfd, message, strlen(message), 0, (struct sockaddr )&servaddr, sizeof(servaddr));
std::cout << "Message sent!" << std::endl;

char buffer[1024] = {0};
socklen_t len = sizeof(servaddr);
recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr )&servaddr, &len);
std::cout << "Received: " << buffer << std::endl;

close(sockfd);
return 0;
}

2.3 网络编程中的多线程

cpp
include
include
include
include
include
include

void connection_handler(void );

int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
std::cerr << "Socket creation failed!" << std::endl;
return -1;
}

struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080);
servaddr.sin_addr.s_addr = INADDR_ANY;

if (bind(sockfd, (struct sockaddr )&servaddr, sizeof(servaddr)) < 0) {
std::cerr << "Bind failed!" << std::endl;
return -1;
}

listen(sockfd, 10);
std::cout << "Listening for connections..." << std::endl;

int newsockfd;
socklen_t clilen = sizeof(struct sockaddr_in);
newsockfd = accept(sockfd, (struct sockaddr )&clilen, NULL);
if (newsockfd < 0) {
std::cerr << "Accept failed!" << std::endl;
return -1;
}

pthread_t thread_id;
if (pthread_create(&thread_id, NULL, connection_handler, (void )&newsockfd) < 0) {
std::cerr << "Could not create thread" << std::endl;
return -1;
}

pthread_join(thread_id, NULL);
close(sockfd);
return 0;
}

void connection_handler(void socket_desc) {
// Handle client connection
// ...
close((int)socket_desc);
return 0;
}

三、总结

本文通过一系列的 C++ 网络编程面试题,展示了如何使用 C++ 进行基础和高级网络编程。通过这些示例代码,读者可以加深对网络编程的理解,并提高在面试中的表现。

在实际开发中,网络编程是一个复杂且涉及面广的领域。除了上述示例,还需要掌握更多的网络协议、数据结构和算法。希望本文能对您的网络编程学习之路有所帮助。