json模块补充

json保存的格式中,key值一定要用双引号隔开

import json
#把字典转成json格式字符串
dic = {'name': 'lqz', 'xx': False, 'yy': None}
print(type(dic)) #字典类型 dic_s = json.dumps(dic)
#json格式字符串
print(type(dic_s))#字符串类型(json形式) dic_s2 = str(dic)
print(dic_s2)
print(type(dic_s2)) #是字符串,但是不是json格式的字符串 json.dumps() #字典转成字符串(json)
json.dump() #字典转成字符串(json),并存到文件中 json.loads() #把json格式字符串转成字典
json.load() #从文件中把json格式字符串转成字典 #不是json格式字符串转换,直接报错
ss = 'falseee'#会报错,普通字符串不能转换,(false,null,还有字典{},列表[]除外)
ss = 'false'#打印出来是bool值
print(json.loads(ss))
print(type(json.loads(ss))) ss = {'name': 'lqz', 'xx':False, "yy":None}
print(json.dumps(ss))
print(type(json.dumps(ss)))
'''
{"name": "lqz", "xx": false, "yy": null}
<class 'str'>
'''

套接字编程(TCP)

###服务端
import socket #买手机,实例化生成一个socket对象
server = socket.socket() #绑定手机卡, 监听地址
server.bind(('127.0.0.1', 8003)) #监听,设置半连接池的大小
server.listen(5) #连接循环
while True:
#一旦有个客户端来连接成功,会返回两个值,
# 如果没有,会卡在这
conn, addr = server.accept() #通信循环
while True:
#卡在这,等着客户端来发
data = conn.recv(1024)
conn.send(data.upper())
conn.close()
server.close() #客户端 import socket
client = socket.socket()
client.connect(('127.0.0.1', 8003))
#通信循环
while True:
msg = input('>>>:')
client.send(msg.encode('utf8'))
#client.send(bytes(msg, 'utf8')) #和上面的语句相同
data = client.recv(1024)
print(data)
client.close()

套接字编程(TCP)(解决粘包问题)

粘包问题:我的理解是,由于TCP协议是流式协议,像流水一般是连续的,所以有可能我的数据尾会和后面的数据头连在一块,形成粘包。(TCP协议会把数据量较小,时间间隔较短的数据,一次性发过去)

详细了解请>>>>https://www.cnblogs.com/nickchen121/p/11031027.html

#客户端_粘包

import socket
import struct
import json
client =socket.socket()
client.connect(('127.0.0.1', 8003))
while True: #通信循环
msg=input('开始接收?>>:')
#先收4个字节,取出头部的长度
head_len=struct.unpack('i',client.recv(4))[0]
#接收头部
dic=json.loads(client.recv(head_len))
l=dic['size']
name=dic['name']
count=0
data=b''
with open(name,'wb') as f:
while count<l:
if l<1024:
data_temp=client.recv(l)
else:
if l-count>=1024:
data_temp=client.recv(1024)
print(data_temp) else:
data_temp=client.recv(l - count)
data+=data_temp
count+=len(data_temp)
f.write(data) print('接收完成')
client.close() #服务端_粘包 import socket
import os
import json
import struct
server=socket.socket()
server.bind(('127.0.0.1', 8003))
server.listen(5)
while True: #连接循环
#一旦有个客户端来连接成功,会返回两个值,如果没有,会卡在这
conn,addr=server.accept() while True: #通信循环
#加个文件头
# {size:os.path.getsize(),name:'333.py',md5:asdfasdfasfd}
#计算一下头的长度
dic={'size':os.path.getsize('json模块.py'),'name':'xxxxxx.py'}
#转成bytes格式
dic_b=bytes(json.dumps(dic),'utf-8')
#获取长度
dic_b_len=len(dic_b)
obj=struct.pack('i',dic_b_len)
#发送四个字节
conn.send(obj)
#发头部内容
conn.send(dic_b)
#直接以+形式打开,就不需要转换了 rb
with open('json模块.py','rb') as f:
# conn.send(f.read())
# f 是文件对象,它可迭代
for line in f:
conn.send(line)
conn.close()
server.close()

最新文章

  1. js异步编程
  2. MethodNotAllowedHttpException
  3. LayoutInflater.Factory的夜间模式
  4. HDU 5486 Difference of Clustering 图论
  5. devDependencies和dependencies的区别
  6. 练习--LINUX进程间通信之信号SIGNAL
  7. 【MySql】Linux下更改转移mysql数据库目录
  8. IIS SSL取消证书合法性验证
  9. JAVAEE规范基础知识
  10. POJ3041-Asteroids-匈牙利算法
  11. JAVA_SE基础——50.接口关系下的多态
  12. mysql 水平分表
  13. Qt+数据库发布后无法打开数据库
  14. 8.2 DRAM和SRAM
  15. MySQL 分页查询和存储过程
  16. 解决 shopnc b2b2c 版权问题 修改路经ULR及目录文件夹思路及教程
  17. api重复引用导致的诡异问题排查
  18. Jenkins搭建.NET自动编译发布远程环境
  19. AccessTokens
  20. SPOJ KPSUM ★(数位DP)

热门文章

  1. Spring Boot 知识笔记(定时任务与异步)
  2. guava(二) Equivalence &amp; Supplier
  3. mybatis解决字段名和实体属性不相同
  4. Oracle逻辑结构学习笔记
  5. 解决xunsearch热门搜索,不按照数量排序问题
  6. fiverr无法注册的解决办法,fiverr注册教程
  7. Appium+python自动化(七)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 上(超详解)
  8. AppBarLayout折叠时候的阴影
  9. 深入V8引擎-写在前面
  10. Power BI连接Oracle的注意事项