【发布时间】:2018-02-25 13:37:23
【问题描述】:
我有以下类,一个 Point 对象
class Point:
def __init__(self):
pass
def __init__(self, x, y):
self.x = x
self.y = y
我有一个服务器(使用 UDP)
# Server side
import socket
import pickle
host = "localhost"
port = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
data = s.recvfrom(1024)
print(data)
我的客户端是:
import socket
import pickle
from Point import *
host = "localhost"
port = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
p = Point(10, 20)
a = pickle.dumps(p)
s.sendto(a, (host, port))
在服务器端,每当我得到p 并打印它时,我都会得到以下(b'\x80\x03cPoint\nPoint\nq\x00)\x81q\x01}q\x02(X\x01\x00\x00\x00xq\x03K\nX\x01\x00\x00\x00yq\x04K\x14ub.', ('127.0.0.1', 55511))
我怎样才能得到对象,而不是这个?
【问题讨论】:
-
...使用
pickle.loads? “它不起作用”是什么意思?它会抛出错误吗?它会使您的PC崩溃吗?它是否返回一个圆而不是一个点? -
@Aran-Fey 我这样做了,但我仍然无法加载创建对象,我更新了我的问题以显示我尝试过的内容
-
为什么你有 两个
__init__方法?第一个定义是无效的,被第二个取代。 -
我强烈想提醒大家不要在客户端-服务器应用程序中使用 Pickle,除非你想敞开心扉让进程被劫持。 Pickles 允许任意代码执行。
-
@MartijnPieters 谢谢!我更新了问题。尽管如此,出于好奇,还是想知道如何实现这一目标。