You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用Pickle传输对象:UDP服务端如何获取Point对象?

解决UDP传输中Point对象反序列化的问题

哦,我太懂你现在的困惑了!你看到的那串看起来乱糟糟的字节数据,其实是Python的pickle模块把你的Point对象序列化后的产物——简单说就是把对象转成了能在网络上传输的字节流。要把它变回你熟悉的Point对象,只需要做反序列化操作就行啦。

具体步骤如下:

  1. 确保服务端有Point类的定义
    反序列化需要知道Point类的结构,所以服务端必须和客户端一样,有完整的Point类定义,或者从对应模块导入这个类。比如:

    class Point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
  2. 用pickle.loads()解析字节数据
    服务端接收到数据后,把收到的字节流传给pickle.loads()方法,就能直接还原出Point对象了。给你个完整的服务端示例:

    import pickle
    import socket
    
    # 先定义Point类,或者从其他文件导入
    class Point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
    # 初始化UDP服务端
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_socket.bind(('127.0.0.1', 5555))  # 绑定你自己的端口
    
    print("UDP服务端已启动,等待数据...")
    while True:
        raw_data, client_addr = server_socket.recvfrom(1024)
        # 反序列化得到Point对象
        point_obj = pickle.loads(raw_data)
        # 现在就可以正常使用这个对象了
        print(f"收到来自{client_addr}的Point对象: x={point_obj.x}, y={point_obj.y}")
    

重要提醒:

  • 客户端那边肯定是用pickle.dumps()把Point对象转成字节流发送的,服务端必须用对应的pickle.loads()来解析,二者要配对。
  • 务必保证服务端和客户端的Point类定义完全一致(类名、属性名、结构都不能变),不然反序列化会抛出错误。
  • pickle虽然好用,但要注意安全:绝对不要反序列化来自不可信来源的数据,因为它可能会执行恶意代码哦。

内容的提问来源于stack exchange,提问作者tony9099

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:07:57