要件:クライアントでファイル名を入力し、クライアントを介してファイル名をサーバーに送信します。サーバーはファイルの内容をクライアントに返し、ファイルのダウンロード要求をサーバーに送信するクライアントの作業内容をシミュレートします。
実行する必要がある最初の準備は次のとおりです。
環境の準備
- 同じネットワークセグメントの下にある2台のコンピューター(両方ともPython環境を備えている必要があります)、同じネットワークセグメントは、同じWi-Fiにアクセスする2台のコンピューターとして理解できます。
- コンピューターが1台しかない場合は、シミュレーション用に仮想マシンをセットアップできます(Python環境が必要です)
いずれかのパソコンのIPアドレスを確認してサーバーとして使用します。
私はMacです。確認内容は以下のとおりです。
私はちょうど2台のコンピューターを手にしているので、1台をサーバーとして、もう1台をクライアントとして使用し、次のコードを記述します。
サーバ側
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()