利用python和socket通过tcp传输一个大文件,需要屏幕打印传输剩余时间,已经传输的百分比
时间: 2024-03-09 11:19:59 浏览: 79
利用python进行大文件的传输
以下是一个利用python和socket通过tcp传输一个大文件,并且在屏幕打印传输剩余时间和已经传输的百分比的示例代码:
```
import socket
import os
import time
# 定义文件大小
FILE_SIZE = os.path.getsize('file_to_transfer')
# 定义缓冲区大小
BUFFER_SIZE = 4096
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP和端口号
server_socket.bind(('127.0.0.1', 12345))
# 监听连接
server_socket.listen()
# 等待客户端连接
client_socket, address = server_socket.accept()
print(f'Connected by {address}')
# 记录开始传输时间
start_time = time.time()
# 已经传输的字节数
bytes_sent = 0
# 循环传输文件内容
with open('file_to_transfer', 'rb') as f:
while True:
# 从文件中读取数据
data = f.read(BUFFER_SIZE)
# 如果没有数据了,退出循环
if not data:
break
# 发送数据给客户端
client_socket.sendall(data)
# 更新已经传输的字节数
bytes_sent += len(data)
# 计算已经传输的百分比
percent = bytes_sent / FILE_SIZE * 100
# 计算传输剩余时间
remaining_time = (FILE_SIZE - bytes_sent) / (bytes_sent / (time.time() - start_time))
# 打印传输状态
print(f'{percent:.2f}% transferred, {remaining_time:.2f} seconds remaining')
# 关闭连接
client_socket.close()
server_socket.close()
```
在上面的示例代码中,我们首先定义了文件大小和缓冲区大小,然后创建了一个socket对象并绑定IP和端口号,然后等待客户端连接。
在传输文件内容时,我们使用一个循环来读取文件内容并发送给客户端,同时更新已经传输的字节数,并计算已经传输的百分比和传输剩余时间,并在屏幕上打印传输状态。
最后,我们关闭客户端和服务器的socket连接。
阅读全文