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()
struct_recv
 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()
struct_send

 

posted @ 2019-06-07 19:56  maplethefox  阅读(881)  评论(0编辑  收藏  举报