需求:在客户端输入文件名,经由客户端将其文件名发送给服务端,服务端将文件内容返回给客户端,模拟客户端向服务端发送文件下载请求的工作内容
首先需要做好的准备工作如下:
环境准备
- 在同一网段下的两台电脑(要求都配有python环境),同一网段可以理解为两台电脑接入同一wifi
- 只有一台电脑的,可以搭设虚拟机进行模拟(要求都配有python环境)
确认好其中一台电脑的ip地址,将其作为服务端,
我是mac本,确认内容如下所示
我手里正好有两台电脑,因此将其中一台作为服务端,另一台作为客户端,进行如下代码的编写
server端
import socket,os
# 创建一个基于tcp的socket连接
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定ip地址和端口号
s.bind(('192.168.1.104',9000))
# 监听
s.listen(128)
# 接受客户端发来的请求
client_socket,client_addr = s.accept()
data = client_socket.recv(1024).decode('utf8')
# 读取文件,返回给客户端
if os.path.isfile(data):
print('读取文件,将文件内容返回给客户端')
with open(data,'r',encoding = 'utf8') as file:
content = file.read()
client_socket.send(content.encode('utf8'))
else:
print('文件不存在')
# 关闭socket
s.close()
client端
import socket
# 创建一个基于tcp的socket连接
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接服务ip地址及端口号
s.connect(('192.168.1.104',9000))
# 向服务端发送数据
file_name = input('PLEASE INPUT FILE NAME:')
s.send(file_name.encode('utf8'))
# 接受服务端返回的文件内容,并写入到文件
content = s.recv(1024).decode('utf8')
with open(file_name,'w',encoding='utf8') as file:
file.write(content)
# 关闭socket
s.close()