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)
说明
先开启服务器,在开启客户端,可以看到传输的数据