通过网络发送多个列表(列表列表)

时间:2014-02-18 07:01:35

标签: python list sockets pickle

假设我有两个列表,它们是点的x和y坐标。现在我想通过套接字将2个列表发送到网络上的其他计算机。因为我想发送列表,所以我将列表附加到列表中以形成列表列表,然后发送数据。

1.由于它们是列表,我是否需要腌制它们?

2.接收方如何取消列表并将值存储在2个不同的列表中?

说明情况的例子如下:

listx=[1,2,3]
listy=[4,5,6]
list_to_send.append(listx)
list_to_send.append(listy)
print list_to_send=>[[1,2,3],[4,5,6]]

将列表发送给收件人

在接收方:

α= socket.recv(1024)

现在如何取消分类和区分列表?

1 个答案:

答案 0 :(得分:2)

更好的选择是像JSON这样的结构。腌制是一个很好的选择,但开箱即用,它不太安全。 (不久之后我会在这里提出一个关于此的链接)。另外我假设您的问题更多是关于序列化/反序列化而不是TCP套接字。

>>> import json
>>> list_to_send = []
>>> listx=[1,2,3]
>>> listy=[4,5,6]
>>> list_to_send.append(listx)
>>> list_to_send.append(listy)
>>> json.dumps(list_to_send)
'[[1, 2, 3], [4, 5, 6]]'
>>> msg = json.dumps(list_to_send)
>>> sendOverSocket(msg)

在接收方:

>>> msg = receiveFromSocket()
>>> list_received = json.loads(msg)

我遗漏了上面套接字特定函数的实现。


现在回答你的问题:

  

1.由于它们是列表,我是否需要腌制它们?

是的,您通过电线发送的任何对象都需要序列化。 Pickle或JSONify它,你的电话。

  

2.在接收方那边如何取消列表并将值存储在2个不同的列表中?

如上所述使用json.loads(..)或腌制特定功能。在上面的代码中,list_received[0]将是第一个列表,list_received[1]将是第二个列表,依此类推..