在Python中实现基于socket的文件传输可以使用标准库中的socket
模块。下面是一个简单的例子,演示了如何使用socket进行文件传输,其中一个作为服务端,另一个作为客户端。
1. 服务端代码:
import socket
def server():
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_address = ('127.0.0.1', 12345)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(1)
print("等待客户端连接...")
# 接受连接
client_socket, client_address = server_socket.accept()
print(f"接收来自 {client_address} 的连接")
# 接收文件
with open('received_file.txt', 'wb') as file:
data = client_socket.recv(1024)
while data:
file.write(data)
data = client_socket.recv(1024)
print("文件接收完成")
# 关闭连接
client_socket.close()
server_socket.close()
if __name__ == "__main__":
server()
2. 客户端代码:
import socket
def client():
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务端
server_address = ('127.0.0.1', 12345)
client_socket.connect(server_address)
print("连接到服务端")
# 发送文件
with open('file_to_send.txt', 'rb') as file:
data = file.read(1024)
while data:
client_socket.send(data)
data = file.read(1024)
print("文件发送完成")
# 关闭连接
client_socket.close()
if __name__ == "__main__":
client()
这个简单的例子中,服务端绑定地址和端口,监听连接,一旦有客户端连接,就接收文件并保存到received_file.txt
。客户端连接服务端,读取本地的file_to_send.txt
文件,将文件内容通过socket发送到服务端。
请注意,这个例子是基于阻塞式I/O的,实际生产环境中可能需要考虑使用多线程或异步I/O等机制来处理多个连接和提高并发性能。同时,要确保服务端和客户端的文件操作和socket通信都进行了适当的错误处理。