使用Python编写一个简单的文件分享程序
发布时间:2023-12-04 12:34:51
文件分享是一种常见的需求,可以方便地在不同设备之间共享文件。下面是一个使用Python编写的简单文件分享程序的例子。
首先,我们需要导入一些必要的模块。在这个例子中,我们将使用socket模块来实现网络通信,以及os模块来处理文件操作。
import socket import os
接下来,我们定义一些常量来设置网络连接的端口号和文件保存的位置。
PORT = 12345 # 网络连接的端口号 SAVE_DIR = 'shared_files/' # 文件保存的位置
然后,我们定义一些函数来处理文件分享的各个环节。
1. send_file函数用来发送文件给对方。
def send_file(conn, filename):
try:
with open(filename, 'rb') as file:
data = file.read()
conn.sendall(data)
print('文件发送成功')
except FileNotFoundError:
print('文件不存在')
2. recv_file函数用来接收对方发送的文件。
def recv_file(conn, filename):
try:
with open(filename, 'wb') as file:
data = conn.recv(1024)
while data:
file.write(data)
data = conn.recv(1024)
print('文件接收成功')
except FileNotFoundError:
print('文件保存路径不存在')
3. list_files函数用来列出文件分享目录中的所有文件。
def list_files():
files = os.listdir(SAVE_DIR)
for file in files:
print(file)
4. handle_client函数用来处理客户端的连接请求。
def handle_client(conn):
conn.sendall(b'Hello, welcome to file sharing!')
while True:
data = conn.recv(1024).decode()
if data == 'list':
list_files()
elif data.startswith('send'):
_, filename = data.split(' ')
send_file(conn, SAVE_DIR + filename)
elif data.startswith('recv'):
_, filename = data.split(' ')
recv_file(conn, SAVE_DIR + filename)
elif data == 'quit':
break
最后,我们创建一个服务端来监听客户端的连接。
def start_server():
print('服务器已启动,等待连接...')
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
server_socket.bind(('0.0.0.0', PORT))
server_socket.listen(5)
while True:
conn, addr = server_socket.accept()
print('已连接:', addr)
handle_client(conn)
conn.close()
print('连接已关闭')
使用例子:
1. 启动服务端,等待连接。
start_server()
2. 启动客户端,连接到服务端。
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
client_socket.connect(('localhost', PORT))
message = client_socket.recv(1024)
print(message.decode())
3. 发送文件给服务端。
client_socket.sendall(b'send example.txt')
4. 从服务端接收文件。
client_socket.sendall(b'recv example.txt')
5. 列出服务端文件分享目录中的文件。
client_socket.sendall(b'list')
6. 断开连接。
client_socket.sendall(b'quit')
通过这个例子,我们可以看到如何使用Python编写一个简单的文件分享程序。在实际使用中,我们可以根据需求对程序进行修改和扩展。
