Mor*_*ras 2 python sockets tcp list
我想通过TCP套接字发送一个列表,但是当从服务器端接收时我无法获得确切的列表.更具体地说我有这个清单:
y=[0,12,6,8,3,2,10]
Run Code Online (Sandbox Code Playgroud)
然后,我发送列表中的每个项目,如下所示:
for x in y :
s.send(str(x))
Run Code Online (Sandbox Code Playgroud)
现在收到数据的服务器代码如下所示:
while True:
data = connection.recv(4096)
if data:
print('received "%s"' % data)
else:
print('no more data from', client_address)
break
Run Code Online (Sandbox Code Playgroud)
问题是,当我运行程序时,我没有得到相同的列表,但这样的事情:
数据= [012,6,83,210]
此外,每次运行程序时,我都会得到不同的列表数据结果
任何想法我的代码出了什么问题?
根据接收方使用pickle或json发送列表(或任何其他对象).json在这种情况下,您不需要因为您的接收主机使用python.
import pickle
y=[0,12,6,8,3,2,10]
data=pickle.dumps(y)
s.send(data)
Run Code Online (Sandbox Code Playgroud)
使用pickle.loads(recvd_data)接收方.
参考:https://docs.python.org/2/library/pickle.html
抱歉我的回复太晚了,但我希望这可以帮助其他遇到此问题的人。这可能不是最好的解决方案,但我会将列表转换为字符串,然后编码并发送该字符串。然后,接收端可以使用 接收、解码该字符串并将其转换回列表eval()。这看起来像这样:
发件人:
y = [0,12,6,8,3,2,10]
# Convert To String
y = str(y)
# Encode String
y = y.encode()
# Send Encoded String version of the List
s.send(y)
Run Code Online (Sandbox Code Playgroud)
接收者:
data = connection.recv(4096)
# Decode received data into UTF-8
data = data.decode('utf-8')
# Convert decoded data into list
data = eval(data)
Run Code Online (Sandbox Code Playgroud)