用python实现基于TCP协议的文件传输系统:设计一个可以实现文件上传的系统,利用TCP协议进行数据传输,包括客户端和服务器端的实现。
时间: 2024-03-06 14:48:57 浏览: 206
python实现TCP文件传输
实现基于 TCP 协议的文件传输系统需要用到 Python 的 socket 模块和文件操作技术。下面是一个简单的文件上传系统示例代码:
### 服务器端代码
```python
import socket
# 定义全局变量
HOST = '0.0.0.0'
PORT = 8888
ADDR = (HOST, PORT)
# 创建 TCP 服务器端 socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_socket.bind(ADDR)
# 开始监听连接请求
server_socket.listen(5)
print('服务器启动,等待连接...')
while True:
# 等待客户端连接
client_socket, client_address = server_socket.accept()
print('客户端已连接:', client_address)
# 接收文件名和文件大小
file_name = client_socket.recv(1024).decode()
file_size = int(client_socket.recv(1024).decode())
# 打开文件并写入数据
with open(file_name, 'wb') as f:
while True:
data = client_socket.recv(1024)
if not data:
break
f.write(data)
print('文件传输完成:', file_name)
# 关闭连接
client_socket.close()
# 关闭服务器端 socket
server_socket.close()
```
### 客户端代码
```python
import socket
# 定义全局变量
HOST = '127.0.0.1' # 服务器地址
PORT = 8888
ADDR = (HOST, PORT)
# 创建 TCP 客户端 socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect(ADDR)
print('已连接服务器...')
# 发送文件名和文件大小
file_name = input('请输入要上传的文件名:')
file_size = str(os.path.getsize(file_name))
client_socket.send(file_name.encode())
client_socket.send(file_size.encode())
# 打开文件并读取数据
with open(file_name, 'rb') as f:
while True:
data = f.read(1024)
if not data:
break
client_socket.send(data)
print('文件传输完成:', file_name)
# 关闭连接
client_socket.close()
```
以上代码仅作为基于 TCP 协议的文件传输系统的简单示例,实际应用中需要添加异常处理和进度条等功能以提高用户体验。
阅读全文