Python网络编程—struct模块的使用
struct模块的使用
1.原理: 将一组简单数据进行打包,转换为bytes格式发送。或者将一组bytes格式数据,进行解析。
2.接口使用
Struct(fmt)
- 功能: 生成结构化对象
- 参数:fmt 定制的数据结构
st.pack(v1,v2,v3....)
- 功能: 将一组数据按照指定格式打包转换为bytes
- 参数:要打包的数据
- 返回值: bytes字节串
st.unpack(bytes_data)
- 功能: 将bytes字节串按照指定的格式解析
- 参数: 要解析的字节串
- 返回值: 解析后的内容
struct.pack(fmt,v1,v2,v3...)
struct.unpack(fmt,bytes_data)
说明: 可以使用struct模块直接调用pack unpack。此时这两函数第一个参数传入fmt。其他用法功能相同
1 """ 2 思路分析 3 1. 创建udp套接字 4 2. 循环接收内容 5 3. 将接收内容写入文件 6 """ 7 8 from socket import * 9 import struct 10 11 # udp 12 s = socket(AF_INET,SOCK_DGRAM) 13 s.bind(('127.0.0.1',8888)) 14 15 # 数据结构 16 st = struct.Struct("i32sif") 17 18 # 打开文件 19 f = open('student.txt','a') 20 21 while True: 22 data,addr = s.recvfrom(1024) 23 data = st.unpack(data) # 解析数据 24 25 # 整理数据 26 info = "%d %-10s %d %.1f\n"%\ 27 (data[0],data[1].decode(),data[2],data[3]) 28 f.write(info) 29 f.flush() 30 31 f.close() 32 s.close()
1 from socket import * 2 import struct 3 4 # 服务器地址 5 ADDR = ('127.0.0.1',8888) 6 7 # 格式 与服务端一致 8 st = struct.Struct("i32sif") 9 10 s = socket(AF_INET,SOCK_DGRAM) 11 12 while True: 13 print("==========================") 14 id = int(input("ID:")) 15 name = input("Name:").encode() 16 age = int(input("Age:")) 17 score = float(input("Score:")) 18 # 打包数据 19 data = st.pack(id,name,age,score) 20 s.sendto(data,ADDR) 21 22 s.close()