python recv的概念和使用案例

recv 是网络编程中用于从套接字接收数据的核心函数,常见于 TCP/UDP 通信。以下是其概念、用法和案例详解:


概念

  1. 作用:从已连接(TCP)或已绑定(UDP)的套接字接收数据。
  2. 参数
    • bufsize: 指定接收缓冲区的大小(一次最多接收的字节数)。
    • flags(可选): 控制接收行为(如 MSG_PEEK 仅查看数据不移除)。
  3. 返回值
    • 成功时返回接收到的字节数据(类型为 bytes)。
    • 返回空字节(如 b'')表示连接已关闭(TCP)。
    • 错误时抛出异常(如超时、连接重置)。

使用场景

  • TCP 通信:需先建立连接(connect()/accept()),数据可靠但需处理粘包。
  • UDP 通信:无连接,需用 recvfrom 获取发送方地址,数据可能丢失或乱序。

使用案例(Python)

案例 1:TCP 客户端接收数据
import socket# 创建 TCP 客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("127.0.0.1", 8080))# 发送请求
client.send(b"Hello Server!")# 接收响应(最多 1024 字节)
data = client.recv(1024)
print(f"Received: {data.decode()}")client.close()
案例 2:TCP 服务器循环接收数据
import socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("0.0.0.0", 8080))
server.listen(1)while True:client, addr = server.accept()print(f"Connected by {addr}")while True:data = client.recv(1024)  # 阻塞等待数据if not data:break  # 连接关闭print(f"Received: {data.decode()}")client.send(b"ACK")  # 回复确认client.close()
案例 3:UDP 接收数据(recvfrom
import socketudp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(("0.0.0.0", 8080))while True:data, addr = udp_socket.recvfrom(1024)  # 同时获取数据和地址print(f"Received from {addr}: {data.decode()}")udp_socket.sendto(b"Reply", addr)  # 向原地址回复

关键注意事项

  1. 阻塞与非阻塞模式

    • 默认阻塞:recv 会一直等待数据,直到有数据或连接关闭。
    • 非阻塞模式:设置 socket.setblocking(False),无数据时立即抛出 BlockingIOError
  2. 处理数据不完整

    • 需循环接收,直到满足业务逻辑(如接收固定长度或特定结束符):
      buffer = bytearray()
      while len(buffer) < expected_size:data = sock.recv(1024)if not data:breakbuffer.extend(data)
      
  3. 超时设置

    sock.settimeout(5.0)  # 5 秒后超时,抛出 socket.timeout
    try:data = sock.recv(1024)
    except socket.timeout:print("Timeout!")
    
  4. 判断连接关闭(TCP):

    • recv 返回空数据(b'')时,表示对方已关闭连接。

常见问题

  • 粘包问题:TCP 是流式协议,多次 send 可能被合并接收,需自定义协议(如添加长度头)。
  • 资源释放recv 失败后需关闭套接字,避免资源泄漏。
  • 编码处理:接收的 bytes 需解码(如 decode('utf-8')),注意处理异常(如非法字符)。

掌握 recv 的细节能显著提升网络应用的健壮性和性能!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Block总结】MAB,多尺度注意力块|即插即用

文章目录 一、论文信息二、创新点三、方法MAB模块解读1、MAB模块概述2、MAB模块组成3、MAB模块的优势 四、效果五、实验结果六、总结代码 一、论文信息 标题: Multi-scale Attention Network for Single Image Super-Resolution作者: Yan Wang, Yusen Li, Gang Wang, Xiaoguan…

Hive存储系统全面测试报告

引言 在大数据时代&#xff0c;数据存储和处理技术的重要性日益凸显。Apache Hive作为一个基于Hadoop的数据仓库工具&#xff0c;因其能够提供类SQL查询功能&#xff08;HiveQL&#xff09;而广受欢迎。Hive的设计初衷是为了简化大数据集的查询和管理&#xff0c;它允许用户通…

Dijkstra算法解析

Dijkstra算法&#xff0c;用于求解图中从一个起点到其他所有节点的最短路径。解决单源最短路径问题的有效方法。 条件 有向 带权路径 时间复杂度 O&#xff08;n平方&#xff09; 方法步骤 1 把图上的点分为两个集合 要求的起点 和除了起点之外的点 。能直达的写上权值 不…

【深度学习】DeepSeek模型介绍与部署

原文链接&#xff1a;DeepSeek-V3 1. 介绍 DeepSeek-V3&#xff0c;一个强大的混合专家 (MoE) 语言模型&#xff0c;拥有 671B 总参数&#xff0c;其中每个 token 激活 37B 参数。 为了实现高效推理和成本效益的训练&#xff0c;DeepSeek-V3 采用了多头潜在注意力 (MLA) 和 De…

深度学习深度解析:从基础到前沿

引言 深度学习作为人工智能的一个重要分支&#xff0c;通过模拟人脑的神经网络结构来进行数据分析和模式识别。它在图像识别、自然语言处理、语音识别等领域取得了显著成果。本文将深入探讨深度学习的基础知识、主要模型架构以及当前的研究热点和发展趋势。 基础概念与数学原理…

如何实现滑动列表功能

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了沉浸式状态栏相关的内容&#xff0c;本章回中将介绍SliverList组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的SliverList组件是一种列表类组件&#xff0c;类似我们之前介…

OpenEuler学习笔记(十七):OpenEuler搭建Redis高可用生产环境

在OpenEuler上搭建Redis高可用生产环境&#xff0c;通常可以采用Redis Sentinel或Redis Cluster两种方式&#xff0c;以下分别介绍两种方式的搭建步骤&#xff1a; 基于Redis Sentinel的高可用环境搭建 安装Redis 配置软件源&#xff1a;可以使用OpenEuler的默认软件源&#…

前沿课题推荐:提升水下导航精度的多源数据融合与算法研究

随着海洋探测技术的迅猛发展&#xff0c;水下地形匹配导航逐渐成为国际研究的热点领域。在全球范围内&#xff0c;水下导航技术的精确性对于科学探索、资源勘探及国防安全等方面都至关重要。我国在这一领域的研究与应用需求日益增长&#xff0c;亟需通过先进的技术手段提升水下…

[创业之路-269]:《创业讨论会》- 系统之韵:从麻雀到5G系统的共通性探索

关键词&#xff1a; 从系统的角度&#xff0c;麻雀、人体系统、企业系统、软硬件系统、软件系统、通信系统、5G系统是类似的&#xff1a; 都有&#xff1a;内在看不见的规律、外在显性各种现象 都是&#xff1a;输入、处理、输出 都是&#xff1a;静态、要素、组成、结构、组织…

【疑问】固态硬盘也是以扇区作为单位吗

回答 固态硬盘&#xff08;SSD&#xff09;与传统机械硬盘&#xff08;HDD&#xff09;在存储结构技术不一样。 理由 机械硬盘使用旋转的磁盘和磁头来读写数据&#xff0c;所以有扇区、磁道和柱面等概念 而固态硬盘则使用闪存芯片来存储数据、没有机械部件&#xff0c;固态硬盘…

浅析CDN安全策略防范

CDN&#xff08;内容分发网络&#xff09;信息安全策略是保障内容分发网络在提供高效服务的同时&#xff0c;确保数据传输安全、防止恶意攻击和保护用户隐私的重要手段。以下从多个方面详细介绍CDN的信息安全策略&#xff1a; 1. 数据加密 数据加密是CDN信息安全策略的核心之…

three.js+WebGL踩坑经验合集(6.1):负缩放,负定矩阵和行列式的关系(2D版本)

春节忙完一轮&#xff0c;总算可以继续来写博客了。希望在春节假期结束之前能多更新几篇。 这一篇会偏理论多一点。笔者本没打算在这一系列里面重点讲理论&#xff0c;所以像相机矩阵推导这种网上已经很多优质文章的内容&#xff0c;笔者就一笔带过。 然而关于负缩放&#xf…

【华为OD-E卷 - 报数游戏 100分(python、java、c++、js、c)】

【华为OD-E卷 - 报数游戏 100分&#xff08;python、java、c、js、c&#xff09;】 题目 100个人围成一圈&#xff0c;每个人有一个编码&#xff0c;编号从1开始到100。 他们从1开始依次报数&#xff0c;报到为M的人自动退出圈圈&#xff0c;然后下一个人接着从1开始报数&…

Linux抢占式内核:技术演进与源码解析

一、引言 Linux内核作为全球广泛使用的开源操作系统核心,其设计和实现一直是计算机科学领域的研究热点。从早期的非抢占式内核到2.6版本引入的抢占式内核,Linux在实时性和响应能力上取得了显著进步。本文将深入探讨Linux抢占式内核的引入背景、技术实现以及与非抢占式内核的…

HTB:Administrator[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机…

DeepSeek模型与OpenAI模型原理和技术架构的异同分析

DeepSeek模型与OpenAI模型原理和技术架构的异同分析 一、模型原理 &#xff08;一&#xff09;DeepSeek R1 DeepSeek R1的核心原理是基于强化学习&#xff08;RL&#xff09;的训练方式&#xff0c;其创新之处在于不依赖任何监督微调&#xff08;SFT&#xff09;数据&#x…

一文讲解JVM中的G1垃圾收集器

接上一篇博文&#xff0c;这篇博文讲下JVM中的G1垃圾收集器 G1在JDK1.7时引入&#xff0c;在JDK9时取代了CMS成为默认的垃圾收集器&#xff1b; G1把Java堆划分为多个大小相等的独立区域Region&#xff0c;每个区域都可以扮演新生代&#xff08;Eden和Survivor&#xff09;或老…

力扣第149场双周赛

文章目录 题目总览题目详解找到字符串中合法的相邻数字重新安排会议得到最多空余时间I3440.重新安排会议得到最多空余时间II 第149场双周赛 题目总览 找到字符串中合法的相邻数字 重新安排会议得到最多空余时间I 重新安排会议得到最多空余时间II 变成好标题的最少代价 题目…

25届 信息安全领域毕业设计选题88例:前沿课题

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光&#xff0c;一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…

【Vite + Vue + Ts 项目三个 tsconfig 文件】

Vite Vue Ts 项目三个 tsconfig 文件 为什么 Vite Vue Ts 项目会有三个 tsconfig 文件&#xff1f;首先我们先了解什么是 tsconfig.json ? 为什么 Vite Vue Ts 项目会有三个 tsconfig 文件&#xff1f; 在使用 Vite 创建 vue-ts 模板的项目时&#xff0c;会发现除了 ts…