文件上传并且保存到本地【网络编程实现】
时间: 2023-08-04 07:03:24 浏览: 51
好的,我可以为您提供网络编程实现文件上传并保存到本地的示例代码。
服务器端示例代码:
```python
import socket
# 服务器地址和端口号
server_address = ('localhost', 8888)
# 创建一个TCP socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定服务器地址和端口号
server_socket.bind(server_address)
# 开始监听客户端连接请求
server_socket.listen(1)
print('服务器已启动,等待客户端连接...')
while True:
# 接受客户端连接请求,返回一个新的socket对象和客户端地址
client_socket, client_address = server_socket.accept()
print('客户端已连接:', client_address)
# 接收文件名和文件大小
file_name = client_socket.recv(1024).decode('utf-8')
file_size = int(client_socket.recv(1024).decode('utf-8'))
# 创建一个新文件,准备写入数据
with open(file_name, 'wb') as f:
# 循环接收文件数据,并写入文件
while file_size > 0:
data = client_socket.recv(1024)
f.write(data)
file_size -= len(data)
print('文件保存成功:', file_name)
# 关闭客户端socket连接
client_socket.close()
# 关闭服务器socket连接
server_socket.close()
```
客户端示例代码:
```python
import socket
# 服务器地址和端口号
server_address = ('localhost', 8888)
# 创建一个TCP socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect(server_address)
# 获取文件名和文件大小
file_name = input('请输入要上传的文件名:')
file_size = len(open(file_name, 'rb').read())
# 发送文件名和文件大小
client_socket.send(file_name.encode('utf-8'))
client_socket.send(str(file_size).encode('utf-8'))
# 打开文件,准备发送数据
with open(file_name, 'rb') as f:
# 循环发送文件数据
while True:
data = f.read(1024)
if not data:
break
client_socket.send(data)
print('文件上传成功:', file_name)
# 关闭客户端socket连接
client_socket.close()
```
以上示例代码可以实现将指定的文件上传并保存到服务器端。其中,客户端先发送文件名和文件大小给服务器端,然后循环读取文件数据并发送给服务器端;服务器端先接收文件名和文件大小,然后循环接收文件数据并写入文件。注意,以上示例代码没有考虑并发连接和异常处理等情况,实际应用中需要根据具体情况进行处理。