Ale*_*lex 1 python sockets dictionary python-3.x
在python3.x我使用套接字我希望通过套接字发送字典的内容,由于某些原因,这条线上面的链接没有回答...
client.py:
a = {'test':1, 'dict':{1:2, 3:4}, 'list': [42, 16]}
bytes = foo(a)
sock.sendall(bytes)
Run Code Online (Sandbox Code Playgroud)
server.py:
bytes = sock.recv()
a = bar(bytes)
print(a)
Run Code Online (Sandbox Code Playgroud)
如何将任何字典转换为字节序列(能够通过套接字发送)以及如何转换回来?我更喜欢干净简单的方法来做到这一点.
到目前为止我尝试了什么:
sock.sendall(json.dumps(data))
TypeError: 'str' does not support the buffer interface
sock.sendall(bytes(data, 'UTF-8'))
TypeError: encoding or errors without a string argument
data = sock.recv(100)
a= data.decode('UTF-8')
AttributeError: 'str' object has no attribute 'decode'
Run Code Online (Sandbox Code Playgroud)
这主要是对注释进行总结,但是您需要将dict转换为json str对象,通过对该str对象进行bytes编码将该对象转换为对象,然后通过套接字发送该对象.在服务器端,您需要bytes将通过套接字发送的对象解码回a str,然后使用json.loads它将其重新转换为dict.
客户:
b = json.dumps(a).encode('utf-8')
s.sendall(b)
Run Code Online (Sandbox Code Playgroud)
服务器:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 1234))
s.listen(1)
conn, addr = s.accept()
b = b''
while 1:
tmp = conn.recv(1024)
b += tmp
d = json.loads(b.decode('utf-8'))
print(d)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7616 次 |
| 最近记录: |