04-案例:文件下载器
1.1 功能分析¶
1.2 实现效果¶
阶段功能:客户端发送要下载的文件名,服务器能够正常接收到文件名(未进行文件数据发送)
1.3 实现步骤¶
客户端实现思路
- 导入模块
- 创建套接字
- 建立和服务器的连接
- 接收用户输入的文件名
- 发送文件名到服务器端
- 创建文件,准备接收服务端返回的文件数据
- 保存文件数据
- 关闭套接字
服务端实现思路
- 导入模块
- 创建套接字
- 绑定地址和端口
- 开始监听,设置套接字为被动监听模式
- 等待客户端连接(如果有新客户端连接,会创建新的套接字)
- 接收客户端发来的文件名
- 根据文件名读取文件数据
- 把读取的文件数据发送给客户端(循环)
- 关闭和客户端的连接
- 关闭服务器
1.4 代码实现¶
客户端 参考代码如下:¶
import socket
"""
客户端实现思路
1、导入模块
2、创建套接字
3、建立和服务器的连接
4、接收用户输入的文件名
5、发送文件名到服务器端
6、创建文件,准备接收服务端返回的文件数据
7、保存文件数据
8、关闭套接字
"""
# 1、导入模块
# 2、创建套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3、建立和服务器的连接
tcp_client_socket.connect(("192.168.31.122", 8080))
# 4、接收用户输入的文件名
file_name = input("请输入文件名:\n")
# 5、发送文件名到服务器端
tcp_client_socket.send(file_name.encode())
# 6、创建文件,准备接收服务端返回的文件数据
# /home/teacher/PycharmProject/python11/day05/1.txt
# |
# 下载
# |
# /home/teacher/桌面/1.txt
# 8、关闭套接字
tcp_client_socket.close()
服务器 参考代码如下:¶
import socket
"""
服务端书写思路
1、导入模块
2、创建套接字
3、绑定地址和端口
4、开始监听,设置套接字为被动监听模式
5、等待客户端连接(如果有新客户端连接,会创建新的套接字)
6、接收客户端发来的文件名
7、根据文件名读取文件数据
8、把读取的文件数据发送给客户端(循环)
9、关闭和客户端的连接
10、关闭服务器
"""
# 1、导入模块
# 2、创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# setsockopt 设置套接字的属性的方法
# .setsockopt(那个级别的套接字,属性名,属性值 )
# socket.SOL_SOCKET 当前套接字
# socket.SO_REUSEADD 设置地址重用 True 可以重用 False 不能重用
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 3、绑定地址和端口
tcp_server_socket.bind(("", 8080))
# 4、开始监听,设置套接字为被动监听模式
tcp_server_socket.listen(128)
while True:
# 5、等待客户端连接(如果有新客户端连接,会创建新的套接字)
new_client_socket, ip_port = tcp_server_socket.accept()
print(ip_port)
# 6、接收客户端发来的文件名
recv_data = new_client_socket.recv(1024)
file_name = recv_data.decode()
# 9、关闭和客户端的连接
new_client_socket.close()
# 10、关闭服务器
tcp_server_socket.close()