阻塞模式:
在阻塞模式下,当程序进行网络通信时,如果没有数据可读或者没有准备好的数据可写,程序将会一直等待,直到有可读或可写的数据。这种模式下的典型特点是程序的执行会暂停,直到操作完成或者超时。以下是一个经典的阻塞模式的代码示例:
#include <iostream>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main() {
// 创建套接字
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
// 绑定地址和端口
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(8080);
bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
// 监听连接
listen(sockfd, 10);
// 接受连接
int connfd = accept(sockfd, NULL, NULL);
// 接收数据
char buffer[1024];
int n = read(connfd, buffer, sizeof(buffer));
// 处理数据
std::cout << "Received data: " << buffer << std::endl;
// 关闭连接
close(connfd);
// 关闭套接字
close(sockfd);
return 0;
}
在上述代码中,程序通过accept
函数等待客户端的连接,如果没有连接到达,程序将一直阻塞在这里。当有连接到达时,程序才会继续执行后续的代码。