python - 无法在客户端加载 JSON 类型的消息
问题描述
当客户端从服务器接收到 JSON 类型消息时,我无法在其中加载带有字典的 JSON 类型消息
字典包含:消息、发件人地址、发送时间当我将字典转储到 JSON 并将其发送到客户端时,客户端尝试加载此字典,因此他不能使用来自服务器的字典中的数据并将其打印给用户此外,当客户端发送消息他可以写“/r”来接收来自服务器的数据,这意味着客户端可以一次接收大数据。这只是从服务器和客户端发送和接收数据的部分代码
服务器
def serialize_data(self, sending_time, message, address,):
message_dict = {
'sending_time': sending_time,
'message': message,
'sender_address': address
}
serialized_dict = dumps(message_dict)
return serialized_dict
def send_messages(self, data_dict, address):
if enable_log:
message = f'{self.get_time()}, {data_dict["message"]}, {address}'
self.save_log(message, 'a')
message = self.serialize_data(self.get_time(), data_dict['message'], address)
for client in self.connections_list:
message = dumps(message)
client.sendall(bytes(message, encoding='utf-8'))
客户
def receive_data(self,):
while True:
try:
data = self.sock.recv(2048).decode('utf-8')
print(data)
data_dict = loads(data)
for d in data_dict:
d = loads(d)
d = f"{d['sending_time']} {d['sender_address']} - {d['message']}"
print(d)
except timeout:
break
当我尝试从服务器接收数据时,我在客户端得到了这个:
"{\"sending_time\": \"2019-05-17 | 21:16:32 \", \"message\": \"connected!\", \"sender_address\": \"127.0.0.1\"}""{\"sending_time\": \"2019-05-17 | 21:16:33 \", \"message\": \"abcd\", \"sender_address\": \"127.0.0.1\"}"
解决方案
那是因为您调用 json.dumps() 两次。
def serialize_data(self, sending_time, message, address,):
message_dict = {
'sending_time': sending_time,
'message': message,
'sender_address': address
}
serialized_dict = dumps(message_dict) # -------------> first time
return serialized_dict
def send_messages(self, data_dict, address):
if enable_log:
message = f'{self.get_time()}, {data_dict["message"]}, {address}'
self.save_log(message, 'a')
message = self.serialize_data(self.get_time(), data_dict['message'], address)
for client in self.connections_list:
message = dumps(message) # ------------------> Second time
client.sendall(bytes(message, encoding='utf-8'))
删除其中任何一个都应该修复它。
推荐阅读
- angular - canActivate 不适用于 Angular 中的重定向路由
- java - 通过拆分字符串创建 JSON?
- webgl - WebGL:INVALID_OPERATION:texSubImage2D:没有绑定 PIXEL_UNPACK_BUFFER
- reactive-programming - 具有可变计数的 Rx 缓冲
- windows - ipython-“无法从'prompt_toolkit.shortcuts'导入名称'create_prompt_application'
- excel - 过滤后如何查找范围内的行数
- python - 如何在随机列表中查找连续元素的列表,其中结果列表的数字不应大于给定数字
- mysql - Kafka 连接 MySQL 到 ES
- java - Eclipse Marketplace - UML 设计器 - 安装错误
- java - 原因:java.io.IOException: CreateProcess error=2, 系统找不到指定的文件