组织客户端 - 服务器之间发送的数据

时间:2013-08-01 20:16:11

标签: python sockets python-2.7

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

假设我有一些我必须发送的元素 - 字符串,元组,dicts:

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

我目前所做的只是将所有内容转换为字符串 - 在发送之前调用repr(),在收到之后调用eval()。这显然有点多余。

我应该如何发送这些数据块?有会议吗?首选格式?我该如何压缩它?

3 个答案:

答案 0 :(得分: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'}]

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

这里显而易见的解决方案是在一端encode the data as JSON,在另一端解码它(除非您有特定的性能要求,需要高度压缩的格式,例如msgpack)。