サーバー インポートソケット インポート構造体 インポートjson インポートos サーバー = socket.socket(socket.AF_INET、socket.SOCK_STREAM) server.bind((' 172.0.0.1 '、8080 )) server.listen( 5 ) while True: conn、client_addr = server.accept() しばらく真: 試してみる: ファイル = conn.recv(1024 ) 場合でlen(ファイル)== 0: BREAKの #1 ダウンロードしたファイルの有無が判断する 場合 ないos.path.exists(ファイル): conn.send(' ダウンロードリンクが存在しない' .encode(' GBK ' )) BREAK #オープンデータを読み込むためのファイル を開きます(ファイル、と' RB ' F AS): RES = F .read() res_len = LEN(RES) #の生産ヘッド header_dic = { " TOTAL_SIZE " :res_len} json_str = json.dumps(header_dic) json_str_bytes = json_str.encode('GBK ' ) #の送信ヘッダ長 X = struct.pack(' I ' 、LEN(json_str_bytes)) conn.send(X) #データ伝送ヘッダ conn.send(json_str_bytes) conn.send(RES) を除く例外: BREAK conn.close() client import socket import json import struct client = socket.socket(socket.AF_INET、socket.SOCK_STREAM) client.connect((' 172.0.0.1 '、8080 )) while True: file = INPUT(' ダウンロードにしたいファイルの名前を入力してください' ).strip() IF lenは(ファイル)== 0: 続行 client.send(file.encode(' GBK ' )) #最初の4を受信するために、取る準備ができてヘッダ情報の長さ X = client.recv(4 ) header_len = struct.unpack(' I ' 、X)[0] # 、ヘッドの長さを有した後、TOTAL_SIZE長の内部ヘッダ情報取得 json_str_bytes = クライアント。 recv(header_len) json_str = json_str_bytes.decode(' gbk ' ) header_dic = json.loads(json_str) total_size = header_dic [" total_size " ] recv_size = 0 while total_size> recv_size: recv_data = client.recv(1024 ) recv_size + = len(recv_data) print(recv_data.decode(' gbk ')、end = '' ) print()