python通过网络传输一个文件。对比TCP和UDP的传输特点。对于大文件,需要屏幕打印传输剩余时间、已经传输的百分比等信息
时间: 2024-05-05 20:15:43 浏览: 70
TCP和UDP是两种常见的网络传输协议,它们在传输文件时有不同的特点。
TCP是面向连接的协议,具有可靠性高、数据传输有序、流量控制和拥塞控制等特点,适合传输大量数据和需要可靠传输的应用场景。但是TCP协议的传输效率相对较低,因为它需要进行连接建立和断开等操作。
UDP是无连接的协议,具有传输速度快、简单、轻量级等特点,适合传输小量数据和对数据传输时延要求较高的应用场景。但是UDP协议的可靠性较差,因为它不具备重传机制和流量控制等功能。
对于大文件的传输,需要考虑传输进度的显示。可以通过Python的tqdm模块实现屏幕打印传输剩余时间、已经传输的百分比等信息,示例代码如下:
```python
import socket
import tqdm
# 设置传输协议为TCP
protocol = socket.SOCK_STREAM
# 设置传输文件的IP和端口号
ip = "127.0.0.1"
port = 5001
# 设置传输文件的路径和名称
filename = "test.mp4"
# 获取文件大小
filesize = os.path.getsize(filename)
# 创建socket对象
s = socket.socket(socket.AF_INET, protocol)
# 连接服务器
s.connect((ip, port))
# 发送文件大小
s.send(f"{filesize}".encode())
# 初始化tqdm进度条
progress_bar = tqdm.tqdm(range(filesize), f"传输{filename}", unit="B", unit_scale=True, unit_divisor=1024)
# 读取文件并发送
with open(filename, "rb") as f:
for _ in progress_bar:
# 读取数据
data = f.read(1024)
if not data:
break
# 发送数据
s.sendall(data)
# 更新进度条
progress_bar.update(len(data))
# 关闭socket连接
s.close()
```
在传输过程中,tqdm模块会实时显示传输进度和剩余时间,方便用户了解传输状态。
阅读全文