day37宿題

サーバー

インポートソケット
 インポート構造体
 インポート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()

 

おすすめ

転載: www.cnblogs.com/yding/p/12749026.html