Python中Client()模块实现文件传输的方法和技巧
发布时间:2024-01-16 18:31:11
在Python中,可以使用socket模块来创建一个客户端程序,用于实现文件传输。下面是一个使用socket模块实现文件传输的示例代码:
import socket
def send_file(file_path, host, port):
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# 连接服务器
client_socket.connect((host, port))
# 打开文件
file = open(file_path, 'rb')
# 发送文件名和文件大小
file_name = file_path.split('/')[-1]
file_size = len(file.read())
client_socket.send(file_name.encode())
client_socket.send(str(file_size).encode())
# 重置文件指针
file.seek(0)
# 发送文件内容
client_socket.sendall(file.read())
print('文件传输完成')
except Exception as e:
print('文件传输失败:', str(e))
finally:
# 关闭文件和socket连接
if file:
file.close()
client_socket.close()
if __name__ == '__main__':
file_path = 'path_to_file'
host = '127.0.0.1'
port = 12345
send_file(file_path, host, port)
上述代码中,send_file函数通过创建一个socket对象,然后使用socket.connect方法连接到服务器。接着,程序读取文件的内容,并发送文件名和文件大小给服务器。然后,通过socket.sendall方法发送文件内容。最后,关闭文件和socket连接。
为了接收文件,你可以在服务器端编写一个相应的receive_file函数。receive_file函数使用socket.accept方法等待客户端连接,然后读取发送的文件名和文件大小,并创建一个文件来接收客户端发送的文件内容。
以下是一个使用socket模块实现文件接收的示例代码:
import socket
def receive_file(save_path, host, port):
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(1)
print('等待客户端连接...')
client_socket, addr = server_socket.accept()
print('已连接:', addr)
try:
# 读取文件名和文件大小
file_name = client_socket.recv(1024).decode()
file_size = int(client_socket.recv(1024).decode())
# 创建文件
file = open(save_path + '/' + file_name, 'wb')
# 接收文件内容
received_size = 0
while received_size < file_size:
data = client_socket.recv(1024)
file.write(data)
received_size += len(data)
print('文件接收完成')
except Exception as e:
print('文件接收失败:', str(e))
finally:
# 关闭文件和socket连接
if file:
file.close()
client_socket.close()
server_socket.close()
if __name__ == '__main__':
save_path = 'path_to_save_file'
host = '127.0.0.1'
port = 12345
receive_file(save_path, host, port)
上述代码中,receive_file函数首先创建一个socket对象,并使用socket.bind方法绑定IP和端口。接着,使用socket.listen(1)方法监听来自客户端的连接请求。一旦客户端连接上来,使用socket.accept方法接受连接,并返回客户端socket对象和地址。然后,程序通过socket.recv方法接收文件名和文件大小,并创建一个文件来接收客户端发送的文件内容。
最后,关闭文件和socket连接。
通过上述的代码,你可以实现在客户端和服务器之间高效地传输文件。可以根据实际需求进行调整,例如加入文件校验、进度显示等功能。
