📅  最后修改于: 2023-12-03 15:36:36.209000             🧑  作者: Mango
文件共享应用程序可以帮助用户在多台计算机之间共享文件。使用Python编写文件共享应用程序可以非常方便地实现这一目的。Python凭借其易于学习的特点、丰富的库以及不错的性能,在文件共享应用程序开发中得到了广泛的应用。
文件共享应用程序可以通过以下步骤实现:
这些步骤可以分别使用Python的socket、os以及struct等库来实现。
以下是一个简单的文件共享应用程序的实现示例。该示例包含一个服务器程序和一个客户端程序。服务器程序可以接收客户端的连接请求,并接收客户端发送的文件。客户端程序可以连接到服务器,并向服务器发送指定的文件。
import os
import socket
import struct
HOST = '127.0.0.1'
PORT = 8000
BUF_SIZE = 1024
def recv_file(conn, file_path):
try:
with open(file_path, 'wb') as f:
while True:
data = conn.recv(BUF_SIZE)
if not data:
break
f.write(data)
except Exception as e:
print('Error:', e)
def send_file(conn, file_path):
try:
with open(file_path, 'rb') as f:
while True:
data = f.read(BUF_SIZE)
if not data:
break
conn.send(data)
except Exception as e:
print('Error:', e)
def main():
# 创建监听套接字
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_sock.bind((HOST, PORT))
server_sock.listen(1)
while True:
print('Waiting for connection...')
# 接受客户端连接请求
conn, addr = server_sock.accept()
print('Connected by', addr)
# 接收客户端发送的文件
file_name = conn.recv(BUF_SIZE).decode()
recv_file(conn, os.path.join('server_files', file_name))
print('File received:', file_name)
# 发送指定的文件给客户端
file_path = 'server_files/File.txt'
file_size = os.path.getsize(file_path)
conn.send(struct.pack('!Q', file_size))
send_file(conn, file_path)
print('File sent:', file_path)
# 关闭连接
conn.close()
server_sock.close()
if __name__ == '__main__':
main()
import os
import socket
import struct
HOST = '127.0.0.1'
PORT = 8000
BUF_SIZE = 1024
def recv_file(conn, file_path):
try:
with open(file_path, 'wb') as f:
while True:
data = conn.recv(BUF_SIZE)
if not data:
break
f.write(data)
except Exception as e:
print('Error:', e)
def send_file(conn, file_path):
try:
with open(file_path, 'rb') as f:
while True:
data = f.read(BUF_SIZE)
if not data:
break
conn.send(data)
except Exception as e:
print('Error:', e)
def main():
# 连接服务器
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_sock.connect((HOST, PORT))
# 发送指定的文件给服务器
file_path = 'client_files/File.txt'
file_name = os.path.basename(file_path)
client_sock.send(file_name.encode())
send_file(client_sock, file_path)
print('File sent:', file_path)
# 接收从服务器发送的文件
data = client_sock.recv(8)
file_size = struct.unpack('!Q', data)[0]
recv_file(client_sock, 'client_files/File_from_server.txt')
print('File received from server')
# 关闭连接
client_sock.close()
if __name__ == '__main__':
main()
该文件共享应用程序示例基于Python的socket、os以及struct等库实现,实现了一个简单的文件共享功能。该示例可以帮助程序员了解如何使用Python实现文件共享应用程序,也可以作为类似应用程序开发的参考。