网络传输数据的编解码
1.网络编程之IP地址&子网掩码2.端口&端口号3.Socket(套接字)4.socket模块中socket类5.socket加密传输6.socket加密传输&mysql应用7.Socket客户端实现8.Socket客户端与服务端9.TCP(Transmission Control Protocol)传输控制协议
10.网络传输数据的编解码
11.TCP客户端开发12.socket之send和recv原理剖析13.多任务版TCP服务端程序开发14.UDP15.http协议之网址16.http协议之简介17.http协议之请求报文18.http协议之响应报文19.搭建Python⾃带静态Web服务器20.自研静态Web服务器并返回固定⻚⾯数据21.静态web服务器-根据请求返回指定页面数据22.静态Web服务器-多任务版23.静态Web服务器-以⾯向对象的模式开发24.静态Web服务器-命令⾏启动并动态绑定端⼝号网络传输数据的类型(二进制)
网络传输是以二进制数据进行传输的,因此在网络传输数据的时候,数据需要先编码转化为二进制(bytes)数据类型
数据的编解码
在Python中进行网络数据传输编解码通常涉及到将数据转换为字节流进行传输,并在接收方将字节流转换回原始数据。
编码
编码是将数据从一种形式转换为字节流的过程,一般是字符转二进制字节流,常见的编码方式有:
- ASCII编码:将文本字符编码成7位二进制数,可表示128个字符。
- UTF-8编码:可变长字节编码方式,可表示世界上所有字符。
- Base64编码:将二进制数据编码为可打印的ASCII字符。
在Python中,可以使用字符串的encode()
方法来进行编码,指定相应的编码方式。例如:
1 text = "Hello, World!" 2 encoded_data = text.encode("utf-8")
解码
解码是将字节流转换回原始数据的过程,常见的解码方式与上述编码方式对应:
- ASCII解码:使用
decode()
方法,指定编码方式为"ascii"。 - UTF-8解码:使用
decode()
方法,指定编码方式为"utf-8"。 - Base64解码:使用
base64
模块的b64decode()
函数。
在Python中,可以使用字节流的decode()
方法进行解码。例如:
1 decoded_data = encoded_data.decode("utf-8")
最佳实践:
- 统一使用统一的编码方式进行数据传输,例如使用UTF-8编码。
- 在网络传输中,将原始数据转换为字节流进行传输,确保数据的可靠性和一致性。
- 使用异常处理机制来处理编解码异常,例如捕获
UnicodeDecodeError
异常。 - 如果需要在不同系统之间进行数据传输,应注意系统之间的默认编码差异,可以使用
locale.getpreferredencoding()
获取当前系统的默认编码。
示例
之前的涉及socket的案例都是使用TCP协议
1 import socket 2 3 # 编码并发送数据 4 def send_data(data, sock): 5 encoded_data = data.encode("utf-8") 6 sock.sendall(encoded_data) 7 8 # 接收并解码数据 9 def receive_data(sock): 10 buffer_size = 1024 11 received_data = b"" 12 13 while True: 14 data = sock.recv(buffer_size) 15 if not data: 16 break 17 received_data += data 18 19 decoded_data = received_data.decode("utf-8") 20 return decoded_data 21 22 # 创建Socket对象 23 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 24 25 # 连接到服务器 26 server_address = ('localhost', 8080) 27 sock.connect(server_address) 28 29 try: 30 # 发送数据 31 send_data("Hello, server!", sock) 32 33 # 接收数据 34 received_data = receive_data(sock) 35 print(received_data) 36 finally: 37 # 关闭连接 38 sock.close()
在上述代码中,实现了一个使用TCP协议的客户端。首先定义了send_data()
函数用于编码并发送数据,以及receive_data()
函数用于接收并解码数据。
然后,我们创建了Socket对象,并通过connect()
方法连接到服务器。之后,我们调用send_data()
函数发送数据给服务器,并调用receive_data()
函数接收
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律