14.5:C++网络编程的阻塞和非阻塞!(课程共5000字,2段代码举例)

本文深入探讨C++网络编程的阻塞和非阻塞模式,介绍其原理、优缺点及应用场景。通过代码示例,阐述了阻塞模式下程序执行会暂停直至操作完成,而非阻塞模式则允许程序立即返回,提高并发性能。讨论了线程安全、异常处理等关键问题,并提供实用建议,帮助开发者在不同场景下做出明智选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阻塞模式:

在阻塞模式下,当程序进行网络通信时,如果没有数据可读或者没有准备好的数据可写,程序将会一直等待,直到有可读或可写的数据。这种模式下的典型特点是程序的执行会暂停,直到操作完成或者超时。以下是一个经典的阻塞模式的代码示例:

#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函数等待客户端的连接,如果没有连接到达,程序将一直阻塞在这里。当有连接到达时,程序才会继续执行后续的代码。

🌷🌷🌷🌷课程概述(课程共5000字,2段代码举例)

🌷🌷🌷🌷C++网络编程的阻塞和非阻塞

🌷🌷🌷🌷阻塞模式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小兔子平安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值