利用pickle序列化,进行socket通信

socket通信

socket通信只能传输二进制数据,每次接受到数据,都需要进行字符串的切割,判断之类的操作。
于是,想到了使用pickle模块提供的序列化和反序列化的功能,来传输一个对象,比如字典。

序列化和反序列化

就是把python中的对象,按照特定的格式,转换为二进制数据,写入到文件中

反序列化

反序列化,则相反,从文件中读取二进制数据,转换为python中的对象
python中大部分的对象都可以序列号,但是序列化只会保留实例属性哦

序列化和json有什么区别

json:按照特定的格式(javascript),转换成为文本字符串,任何程序都可以根据这个通用格式解析json
序列化:按照特定的格式(python特有的),把对象转换为二进制数据(不是字符串),只有python程序可以读取

服务器端代码

s = socket()
s.bind(('127.0.0.1',8089))
s.listen(5)
while True:
    print('开始监听')
    cli,addr = s.accept()
    rel = cli.recv(1024)
    rel = pickle.loads(rel)
    print('接收到了消息',rel)
    
    a = {'from':'server','target':f'{rel["form"]}','message':f'欢迎{rel["form"]}登陆此系统'}
    b = pickle.dumps(a)
    cli.send(b)

客户端代码

a = {'form':'kalpa','target':'miop','message':'hello world'}
b = pickle.dumps(a)
s = socket()
s.connect(('127.0.0.1',8089))
s.send(b)

rel = s.recv(1024)
rel = pickle.loads(rel)
print('收到了消息:',rel)

说明

先开启服务器,在开启客户端,可以看到传输的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值