요구 사항 : 클라이언트에 파일 이름을 입력하고 클라이언트를 통해 서버에 파일 이름을 보냅니다. 서버는 파일의 내용을 클라이언트에 반환하고 클라이언트의 작업 내용을 시뮬레이션하여 서버에 파일 다운로드 요청을 보냅니다.
수행해야 할 첫 번째 준비는 다음과 같습니다.
환경 준비
- 동일한 네트워크 세그먼트에있는 두 대의 컴퓨터 (둘 다 Python 환경을 갖추고 있어야 함), 동일한 네트워크 세그먼트는 동일한 Wi-Fi에 액세스하는 두 대의 컴퓨터로 이해 될 수 있습니다.
- 컴퓨터가 하나 뿐인 경우 시뮬레이션을위한 가상 머신을 설정할 수 있습니다 (python 환경 필요).
컴퓨터 중 하나의 IP 주소를 확인하고 서버로 사용합니다.
저는 Mac이고 확인 내용은 다음과 같습니다.
손에 정확히 두 대의 컴퓨터가 있으므로 하나는 서버로, 다른 하나는 클라이언트로 사용하고 다음 코드를 작성합니다.
서버 측
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()
고객 입장에서
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()