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

原文地址:https://www.cnblogs.com/maplethefox/p/10989048.html

时间: 2024-12-29 11:12:06

Python网络编程—struct模块的使用的相关文章

python网络编程socket模块实现ftp上传下载

本实验实现ftp上传文件下载文件功能,并具有校验文件完整性,打印进度条功能, 主要练习socket,struct模块. ftp用户文件存放在user.json文件中 user.json文件内容 {"lisi": "abcdef", "hyh": "123456"} ftp客户端脚本ftpclient.py #!/usr/bin/python # --*-- coding: utf-8 --*-- import socket i

python网络编程----requests模块

python访问网站可以用标准模块--urllib模块(这里省略),和requests(安装-pip install requests)模块,requests模块是在urllib的基础上进行的封装,比urllib模块功能更强到,易用 import json,requests #发送get请求 url = 'http://api.nnzhp.cn/api/user/stu_info?stu_name=小黑马' req = requests.get(url) #发送get请求 print(req.t

网络编程- struct模块定制报头ftp实践(九)

一.server端import jsonimport structimport socket sk = socket.socket()sk.bind(('127.0.0.1',8080))sk.listen() conn,addr = sk.accept()dic_len = conn.recv(4) # 4个字节 数字的大小dic_len = struct.unpack('i',dic_len)[0]content = conn.recv(dic_len).decode('utf-8') #

浅析Python中的struct模块

最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言的人,一定会知道struct结构体在c语言中的作用,它定义了一种结构,里面包含不同类型的数据(int,char,bool等等),方便对某一结构对象进行处理.而在网络通信当中,大多传递的数据是以二进制流(binary data)存在的.当传递字符串时,不必担心太多的问题,而当传递诸如int.char之

Python网络编程03/ low版解决粘包问题

目录 Python网络编程03/ low版解决粘包问题 1.操作系统的缓存区 2.基于TCP协议的socket循环通信 2.1 服务端(server) 2.2客户端(client) 3.基于TCP协议的socket链接+循环 通信 3.1服务端(server) 3.2 客户端(client) 4.基于TCP协议的socket应用实例:执行远程命令 4.1服务端(server) 4.2客户端(client) 5.粘包现象 5.1服务端(server) 5.2客户端(client) 5.3展示收发问

Python网络编程04/recv原理/高大上版解决粘包方式

目录 Python网络编程04/recv原理/高大上版解决粘包方式 1.昨日内容回顾 2.recv工作原理 3.高大上版解决粘包方式(自定制报头) 3.1 解决思路: 3.2 服务端 3.3客户端 4.基于UDP协议的socket通信 4.1服务端 4.2客户端 Python网络编程04/recv原理/高大上版解决粘包方式 1.昨日内容回顾 1. 通信循环 2. 链接通信循环 3. 远程执行命令: subprocess.Popen() # bytes: 网络传输, 文件存储时. 4. 粘包现象

python 网络编程 (二)---tcp

异常 python的socket模块实际上定义了4种可能出现的异常: 1)与一般I/O 和通信问题有关的socket.error; 2)与查询地址信息有关的socket.gaierror; 3)与其他地址错误有关的socket.herror; 4)与在一个socket上调用settimeout()后,处理超时有关的socket.timeout; import socket, sys, time host = sys.argv[1] textport = sys.argv[2] filename

Python 网络编程

Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket()函数 Pyt

[python] 网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 C#网络编程之使用Socket类Send.Receive方法的同步通讯 Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内容.内容包括:服务器和客户端架构.套接字Socket.TCP\UDP通信实例和常见笔试考题. 最后希望文章对你有所帮助,如果有不