2014-02-18 34 views
0

假设我有2个列表,它们是点的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]] 

发送列表到reciever

在接收器:

一个= socket.recv(1024)

现在如何unickickle和区分列表?

回答

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.As他们名单,我需要腌呢?

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

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

使用json.loads(..)如上,或pickle特定功能。在上面的代码中,list_received[0]将成为第一个列表,list_received[1]将成为第二个列表等。