網絡編程上傳內容

客戶端

import socket
import os
import json
import struct


client =socket.socket()
client.connect(("127.0.0.1",12000))
"""
獲取文件路徑
獲取這個文件路徑下的文件
for循環打印再加上枚舉打印這個文件下的內容
用戶選擇上傳內容
判斷輸入是否時數字
而後把輸入的序號轉爲int類型
判斷這個數字是否大於文件內容
取出用戶選擇的內容而後拼接路徑
取出用戶選擇文件的內容
建立一個字典,取名字放入取出的內容
序列化字典將字典變成一個字符串後邊在轉成二進制
建立一個一個字典的報頭
發送字典的報頭
發送序列話事後的字典
打開文件for 循環文件據柄
在發送循環事後的字符
"""

while True:
    HUOQU = r"D:\老男孩\學習資料\視頻\day30\視頻"
    PATH  =os.listdir(HUOQU)
    for i ,j in enumerate(PATH,1):
        print(i,j)
    choice = input("請輸入編號>>>:")
    if choice.isdigit():
         choice=int(choice)-1
         if choice in range(0,len(PATH)):
             wenjian =os.path.join(HUOQU,PATH[choice])
             neirong = os.path.getsize(wenjian)
             d ={"name":"歐美精選",
                 "file_size":neirong}
             byths = json.dumps(d).encode("utf-8")
             suoxiaoshuju = struct.pack("i",len(byths))
             client.send(suoxiaoshuju)
             client.send(byths)

             with open (wenjian,"rb") as f:
                 for i in f:
                     client.send(i)


         else:
             print("不在範圍")
    else:
        print("不是數字")
服務端
import socket
import json
import struct
server = socket.socket()
server.bind(("127.0.0.1",12000))
server.listen(5)
"""獲取文件報頭
將文件報頭解開
獲取文件
將文件反序列化,將字符串編程字典
取出字典的內的數據
建立初始文件長度
讀出字典文件的數據
判斷文件內的內的數據是否大於字典內的數據
每次取出字節1024
f.取出
文件長度+每次取出的字節"""

while True:
    conn,msg = server.accept()
    while True:

        try:
            res = conn.recv(4)
            res1 = struct.unpack("i",res)[0]
            res2 = conn.recv(res1)
            res3  =json.loads(res2.decode("utf-8"))
            res4 = res3.get("file_size")
            dic_size = 0
            with open(res3.get("name"),"wb") as f:
                while dic_size<res4:
                    data = conn.recv(1024)
                    f.write(data)
                    dic_size+=len(data)
                print("sahngchuan")

        except ConnectionError as e:
            break
    conn.close()
相關文章
相關標籤/搜索