1.今天在写客户端与服务端交互的程序的时候,发现了一个问题

客户端代码

#客户端程序主要是发送注册请求/登录请求给服务端,服务端接收响应后回应对应的应答给客户端,客户端接收响应后,然后做一些操作

# ### 客户端
import socket
import hashlib
import json def register(sk):
name = input('请输入注册用户名')
pwd = input("请输入注册密码")
pwd2 = input("请再次输入注册密码")
dic = {'username':name,'password':pwd,'password2':pwd,'status':1}
sk.send(json.dumps(dic).encode())
res = sk.recv(1024)
return res def login(sk):
name = input('请输入账户')
pwd = input('请输入密码')
hs = hashlib.md5()
hs.update(pwd.encode())
res = hs.hexdigest()
dic = {'username': name, 'password': res, 'password2': res, 'status': 2}
#发送数据
sk.send(json.dumps(dic).encode())
res = sk.recv(1024)
return res
#1.创建对象
sk = socket.socket() #2.创建连接
sk.connect(('127.0.0.1',9001)) #.接收发数据
num = input('请输入注册1,登陆2')
if num == '1':
res = register(sk)
print(res.decode())
elif num == '2':
res = login(sk)
print(res.decode())
else:
print("输入有误请重新输入") #断开连接
sk.close()

服务端代码

# ### 服务端
import hashlib
import json
import socketserver
import os class MyServer(socketserver.BaseRequestHandler):
def handle(self):
conn = self.request
while True:
msg = conn.recv(1024)#接收的是字节流
strvar = msg.decode() #转换为字符串
print(strvar)
json.loads(strvar) #反序列化成字典
print(json)
# if not msg:break #先把这段话去掉
if json.loads(msg.decode())['status'] == 1:
with open('mysql.json','r+',encoding='utf-8') as fp:
if not os.path.getsize('mysql.json'):
hs = hashlib.md5()
hs.update(json.loads(msg.decode())['password'].encode())
hs_res = hs.hexdigest()
dic = {"username": json.loads(msg.decode())['username'], "password": hs_res}
json.dump(dic, fp)
fp.write('\n')
print('注册成功')
conn.send('注册成功'.encode())
break
else:
for i in fp:
dic_res = json.loads(i)
if dic_res["username"] == json.loads(msg.decode())['username']:
print('用户名已注册')
conn.send("用户名已注册".encode())
break
elif json.loads(msg.decode())['username'] not in dic_res["username"]:
hs = hashlib.md5()
hs.update(json.loads(msg.decode())['password'].encode())
hs_res = hs.hexdigest()
dic = {"username":json.loads(msg.decode())['username'],"password":hs_res}
json.dump(dic,fp)
fp.write('\n')
print('注册成功')
conn.send('注册成功'.encode())
break
elif json.loads(msg.decode())['status'] == 2:
with open('mysql.json', 'r', encoding='utf-8') as fp:
for i in fp:
dic_res = json.loads(i)
if dic_res["username"] == json.loads(msg.decode())['username'] and dic_res["password"] == json.loads(msg.decode())['password']:
print('账户密码正确,登录成功')
conn.send('账户密码正确,登录成功'.encode())
break
else:
print('账户或密码错误')
conn.send('账户或密码错误'.encode())
break server = socketserver.ThreadingTCPServer(('127.0.0.1',9001),MyServer)
server.serve_forever()

问题主要出现在客户端发送请求给服务端的时候,服务端报了个json.decoder.JSONDecodeError的问题,但是客户端最后运行的结果显示是正确的

下面是服务端报的错误

 首先我在客户端找了下,发送的数据是没有问题的

 然后去服务端在接收字节流的时候发现出现了问题

 然而在打印屏幕上服务端显示的却是这样,多了次接收并打印,很显然是又传了一次空的字节过来,然后在网上找了一下解决办法,都没有相关的解决办法,都说是跟单引号双引号的关系,然而并不是,最后我想了个办法,它这边会多传一个空字节过来,我服务端接收的时候,加了个判断,if not msg:break ,然后把前面的打印全删了,只留一个msg来接收客户端传过来的字节, 然后再运行的时候,服务端就没有这种JsonDecondeError的问题了

关于json序列化时报错json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)的更多相关文章

  1. json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

    1.json模块常用的四个函数 import json json.load() # 将一个存储在文件中的json对象(str)转化为相对应的python对象 json.loads() # 将一个jso ...

  2. 记录一个奇葩 bug [Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)]

    关于 flask 的一个记录 代码 @auth.login_required @app.route('/add', methods=['POST']) def add(): if request.me ...

  3. pandas处理json脱坑(二)--jsonError: Expecting ',' delimiter: line 1 column 2674

    Expecting ',' delimiter: line 1 column 2674 json_dict = json.loads(row[json_columns].replace("' ...

  4. Django开发之Datetime类型JSON序列化时报错

    前提回顾 在进行django开发view视图时,如果数据库字段是 datetime类型,在JSON序列化返回时,会出现异常 异常现象 TypeError: Object of type datetim ...

  5. Django 之swagger中尝试调试post请求时返回 "detail": "JSON parse error - Expecting value: line 1 column 1 (char)

    swagger已配置OK,但发送POST请求时一直显示数据格式错误,怪异.... 经过各种查找资料,才发现setting.py文件中缺少配置 配置完成后重启服务,再次尝试发送POST请求,不会再报格式 ...

  6. python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决

    在学习python语言中用json库解析网络数据时,我遇到了两个编译错误:json.decoder.JSONDecodeError: Expecting property name enclosed ...

  7. 【JSON】Python读取JSON文件报错json.decoder.JSONDecodeError的问题

    报错 json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line * column * ...

  8. json.loads 报错 json.decoder.JSONDecodeError

    json.loads报json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes 出现这个错误其实只 ...

  9. python:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes问题解决

    有如下一个文件,内容如下 { "test1": "/root/test/test1.template", "test2": "/r ...

  10. 将具有关联关系的两个表从hibernate查询出来转成json对象时报错

    第一篇文章: 相信大家做过JSON相关的东西对这个异常并不陌生,这个异常是由于JSONObject插件内部会无限拆解你传入的对象,直到没有可拆解为止,问题就在这,如果你传入的对象有外键关系,或者相互引 ...

随机推荐

  1. [转帖]vSphere虚拟化平台(vCenter和ESXi)升级注意事项

    https://www.dinghui.org/vmware-vsphere-upgrade.html 最近两年做了蛮多vSphere升级项目,几点思路,做一下汇总整理如下供参考: 一.升级必要性 1 ...

  2. 【转帖】Lua,LuaJIT,Luarocks的安装与配置-史上最详细【Linux】

    目录 一,lunux下lua安装 二,安装luarocks---lua包管理工具 三,LuaJIT的安装 既然各位都点开看了,那么Lua语言不用我介绍了吧,LuaJIT是lua的一个Just-In-T ...

  3. [转帖]Xargs用法详解

    https://www.cnblogs.com/cheyunhua/p/8796433.html 1. 简介 之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要, ...

  4. [转贴]30 分钟学会 AWK

    30 分钟学会 AWK https://mp.weixin.qq.com/s/X0ire4dYiceC2CzPU6JsSw? Linux爱好者 2017-01-08   (点击上方公众号,可快速关注) ...

  5. 全球首个面向遥感任务设计的亿级视觉Transformer大模型

    作者:京东探索研究院 深度学习在很大程度上影响了遥感影像分析领域的研究.然而,大多数现有的遥感深度模型都是用ImageNet预训练权重初始化的,其中自然图像不可避免地与航拍图像相比存在较大的域差距,这 ...

  6. Fabric网络升级(总)

    原文地址在这里. 在fabric网络中,升级nodes和通道至最新版本需要四步: 备份账本和MSPs. 以滚动的方式将orderer升级到最新版. 以滚动的方式将peers升级到最新版. 将order ...

  7. ​【心理学CPCI收录,AP独立出版】 2023年应用心理学与现代化教育国际学术会议(ICAPME 2023)

    ​[心理学CPCI收录,AP独立出版] 2023年应用心理学与现代化教育国际学术会议(ICAPME 2023) 大会官网:www.icapme.org 大会时间:2023年9月22-24日 大会地点: ...

  8. Linux的守护进程 [补档-2023-08-10]

    12-1守护进程 12-1-1介绍 ​   Daemom是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或者事件.这些进 程一般不直接和用户交互,不受用户的登录,注销等影响.没 ...

  9. C++11之函数对象

    目录 1.使用场景 2.函数对象 3.std::bind 4.总结 1.使用场景 在没有C++11的时候,我们通常使用回调函数来完成某些特定的功能,使用回调函数就需要先声明函数指针 示例: typed ...

  10. Vulkan学习苦旅04:创建设备(逻辑设备VkDevice)

    设备是对物理设备的一种抽象,使我们更加方便地使用它.更准确地说,应该称其为"逻辑设备",但由于逻辑设备在Vulkan中极为常用,后面几乎所有的API都需要它作为第一个参数,因此在V ...