python - 使用元类/反射的 python 中 udp 缓冲区的对象类型

标签 python sockets udp

是否可以使用元类/反射从 python 中的 udp 套接字收到的消息中提取对象类型或类名?

场景是这样的:

  1. 在套接字上接收 udp 缓冲区。

  2. UDP 缓冲区是一个序列化的二进制字符串(消息)。但目前尚不清楚消息的类型。因此无法反序列化为适当的消息。

    现在,我的问题是我能否知道序列化二进制字符串(recvd 作为 UDP 缓冲区)的类名,以便我可以反序列化为适当的消息并进一步处理。

提前致谢。

最佳答案

您从 udp 套接字收到的是一个字节字符串——这就是实际上那里的所有“对象类型或类名”。如果字节字符串被​​构建为序列化对象(例如通过 picklemarshal 等),那么您可以将其反序列化回对象(例如使用 pickle .loads),然后然后反省你内心的内容。但大多数字节字符串都是以其他方式构建的,并且当您尝试从中加载时会引发异常;-)。

编辑:OP的编辑提到该字符串是“序列化对象”,但仍然没有说明是什么序列化方法产生了它,这使得一切都不同。 pickle (对于范围更窄的 marshal 类型),在它们生成的字符串上放置足够的信息(通过模块的 .dumps 函数) )它们各自的 loads 函数可以反序列化回适当的类型;但其他方法(例如,struct.pack)不会将此类元数据放入它们生成的字符串中,因此如果没有其他“带外”格式指示,则反序列化是不可行的正在使用。那么,O.P.,最初是如何生成序列化的字节字符串的......?

关于python - 使用元类/反射的 python 中 udp 缓冲区的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1487582/

相关文章:

python - Ping google 关于分页站点地图 django

linux - 我可以使 TCP Keep-Alive 对称吗?

c - 从端口 6343 捕获 sflow 数据时,UDP header 长度字段始终为零

node.js - Node.js 还支持 UDP 广播吗?

python - 访问谷歌数据实验室中不同笔记本中的数据帧

python - Django fixtures 以默认值保存

node.js - 使用 unix 套接字连接 docker websocket

java - Erlang 服务器,Java 客户端 - TCP 消息被拆分?

javascript - node.js 中的 UDP 跟踪器抓取意外返回零

python - Statsmodels 公式 API (patsy) : How to exclude a subset of interaction components?