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. [转帖]Python-Mock接口测试

    https://www.cnblogs.com/zhangwuxuan/p/12928850.html 前言 今天跟小伙伴们一起来学习一下如何编写Python脚本进行mock测试. 什么是mock? ...

  2. [转帖]内存随机访问也比顺序慢,带你深入理解内存IO过程

    https://zhuanlan.zhihu.com/p/86513504 平时大家都知道内存访问很快,今天来让我们来思考两个问题: 问题1: 内存访问一次延时到底是多少?你是否会进行大概的估算? 例 ...

  3. [转帖]Springboot配置https访问

    https://www.cnblogs.com/feifuzeng/p/14709372.html 介绍 该篇博文主要介绍如何配置Springboot使其打包部署的服务必须通过HTTPS协议才可访问, ...

  4. 数据结构与算法 第二章线性表(48课时课程笔记)Data Structure and Algorithms

    2.1 线性表的类型定义 一个线性表是n个数据元素的有限序列. (1)结构初始化 InitList(&L) 构造一个空的线性表L. (2)销毁结构 DestroyList(&L) (3 ...

  5. 基于javaPoet的缓存key优化实践

    一. 背景 在一次系统opsreview中,发现了一些服务配置了@Cacheable注解.@cacheable 来源于spring cache框架中,作用是使用aop的方式将数据库中的热数据缓存在re ...

  6. node借助jsonwebtoken生成token以及验证token是否过期

    生成token使用 jsonwebtoken 插件 我当时使用的版本"jsonwebtoken": "^9.0.0", cnpm i jsonwebtoken ...

  7. 【解决一个小问题】proto文件中的enum,去掉长长的重复的enum名字

    在proto中定义的enum,通常类型名字都会带上enum的前缀,很丑陋,如何去掉呢? enum DataSourceType{ NotUse = 0; MySQL = 1; ElasticSearc ...

  8. ABP无法使用异步操作,但要调用异步方法

    使用 AsyncHelper.RunSync(() => _studentRepository.FirstOrDefaultAsync(x => x.Code == studentCode ...

  9. C/C++ 文件与指针操作笔记

    创建临时文件 #include <stdio.h> int main(int argc, char *argv[]) { FILE *temp; char c; if ((temp = t ...

  10. 史上最大电池!小米智能家庭屏Pro 8图赏

    今天小米智能家庭屏 Pro 8正式开售,集智能家居中控,智能网关以及娱乐教育三大功能为一体,首发749元. 它是一款全新的智能生态产品中控屏,配备了7500mAh大容量电池以及通用性更好的USB Ty ...