2013-08-01 35 views
0

如果之前已经解决了这个问题,请原谅我,但是如何组织在python应用程序(套接字)中的客户端和服务器之间交换的数据?组织在客户端服务器之间发送的数据

比方说,我有一些内容我要送 - 字符串,元组,http://stardict.sourceforge.net/Dictionaries.php下载:

"hello world", (1, 2, 3), {"k": "v"} 

我目前做的是我只是一切都转换为字符串 - 接收后发送之前打电话repr()eval()。这显然有点多余。

我应该如何发送这些数据块?有一个约定吗?首选格式?我如何压缩它?

+1

如果你正在寻找一个术语到谷歌,这是'序列化',python有'pickle'用于python-> python交换和'json'用于python-> world交换。 – roippi

回答

1

最简单的方法是pickle他们在客户端,并取消他们在服务器端。但是,需要确保数据来自可信来源,因为可能会强制unpickle执行任意代码。确保你使用cPickle来获得C语言的实现。

1

你应该nevereval() data from an untrusted source,这意味着你不应该通过eval()任何东西到达一个不安全的网络连接(或者你不能绝对确定另一端的实体是谁或它说的是什么)。

这里明显的解决方案是在一端对encode the data as JSON进行解码,并在另一端进行解码(除非您有特殊的性能要求,例如要求高度压缩的格式,例如msgpack)。

3

JSON是你在找什么。如果你有一个对象,并导入JSON功能:

from json import dumps, loads 

可以使用dumps(obj)编码成JSON和loads(str)以JSON字符串转换回对象。例如:

dumps([[1,2,3],{"a":"b", "c":"d"}]) 

产生'[[1, 2, 3], {"a": "b", "c": "d"}]'

loads('[[1, 2, 3], {"a": "b", "c": "d"}]') 

产生[[1, 2, 3], {u'a': u'b', u'c': u'd'}]

相关问题