【问题标题】:Pickle in Python, incorrect received dataPython中的pickle,接收到的数据不正确
【发布时间】:2016-07-08 17:46:30
【问题描述】:

我正在使用 pickle 创建简单的服务器客户端架构。当我收到数据并打印时,第一个数字消失,为什么?我怎样才能避免这种情况? 例如:({2,2,4}, {3,4}) - > ({2,4}, {3,4})

服务器代码: 进口泡菜 导入套接字

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()


print ("conn info: ", conn)
objrcv = pickle.loads(conn.recv(10024))
print("conn recv: ", objrcv)
print("conn from: ", addr)
print(objrcv) 

客户端代码

import socket
import pickle

name = 'name'
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

data = pickle.dumps(name)
s.connect((TCP_IP, TCP_PORT))
# #s.send(data) #powitalne info, dane gracza

def wyslij_dane(my_array): #sending data
    data = pickle.dumps(my_array)
    if data[0] != 0:  # pierwszy argument odpowiedzialny za poddanie sie
        print('before send')
        s.send(data)
        print('after send') #just to control
        #data_recv = s.recv(BUFFER_SIZE)
        #print("received data:", data_recv)


def rozlacz():#disconnecting
    s.close()

wyslij_dane(({2,2,4}, {3,4}))
wyslij_dane({2,2,433})
wyslij_dane(0)
rozlacz() 

服务器输出:

conn info:  ...
conn recv:  ({2, 4}, {3, 4})
conn from:  ('127.0.0.1', 51876)
({2, 4}, {3, 4})

另外一个问题是:我能做些什么来处理所有的发送数据(都调用 wyslij_dane() 函数)?

【问题讨论】:

  • {2,2,4} 是一个集合,集合具有独特的元素。 Python 会将{2,2,4} 解释为集合{2,4}。这与酸洗无关。
  • 哈,愚蠢的疏忽。谢谢,你能解释一下我能做些什么来处理所有发送数据(都调用 wyslij_dane() 函数)吗?

标签: python server client pickle


【解决方案1】:

“{}”表示您正在使用集合。在一个集合中,每个项目只存在一次。相反,您可以使用带有这些的列表 -> "[]" 或元组 -> "()" 所以

wyslij_dane(({2,2,4}, {3,4}))

变成

wyslij_dane(([2,2,4], [3,4]))

等等。

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    相关资源
    最近更新 更多