我使用过程通信RMC,其代码如下:
HOST = '' # local host
PORT = 50000
SERVER_ADDRESS = HOST, PORT
# set up server socket
s = socket.socket()
s.bind(SERVER_ADDRESS)
s.listen(1)
while True:
conn, addr = s.accept()
connFile = conn.makefile()
name, args, kwargs = cPickle.load(connFile)
'''name = cPickle.load(connFile)
args = cPickle.load(connFile)
kwargs = cPickle.load(connFile)'''
res = _exportedMethods[name](*args,**kwargs)
cPickle.dump(res,connFile) ; connFile.flush()
conn.close()
这是客户端站点:
^{pr2}$执行后,我收到以下错误消息:
Traceback (most recent call last):
File "/home/manch011/disserver/src/disserver/gui/backends/receiver.py", line 71, in run
args = cPickle.load(connFile)
cPickle.UnpicklingError: pickle data was truncated
在我的更改之后,我收到以下错误消息:
Traceback (most recent call last):
File "/home/manch011/disserver/src/disserver/gui/backends/receiver.py", line 69, in run
name, args, kwargs = cPickle.load(connFile)
EOFError
我不熟悉cPickle,因此无法理解这一点,有人能给我解释一下吗?在
提前谢谢 奇斯
当您在类似文件的对象(
connFile = conn.makefile()
)中转换套接字时,您在套接字中的所有内容都可以在文件中使用。当您第一次执行cPickle.load(connFile)
操作时,socket/文件中的所有内容都由pickle加载,所以在第二次调用时,没有任何东西可以取消拾取,这就是pickle在引发异常时所抱怨的。在您的所有数据在第一个
cPickle.load(connFile)
处取消拾取,如果要提取函数名、args和kwargs,请尝试发送包含这些数据的元组:客户端:
服务器端
^{pr2}$相关问题 更多 >
编程相关推荐