# 默寫 TCP UDP 文件夾中的代碼
# 完成一個上傳和下載文件的小程序
# server端 :根據客戶端需求自定義
# client端
# 客戶端啟動之后
# 選擇 上傳操作 還是 下載操作
# 如果是上傳操作 : 輸入要上傳的文件路徑
# 基礎需求 :直接將文件上傳到默認目錄
# 進階需求 :將文件上傳到指定目錄
# 如果是下載文件 : 輸入要下載的文件路徑
# 基礎需求 : 直接將文件下載到當前目錄
# 進階需求 :將文件下載到指定目錄
# 字符串
# 文件 - 讀文件 轉碼 寫文件
# 默寫 TCP UDP 文件夾中的代碼
# 完成一個上傳和下載文件的小程序
# server端 :根據客戶端需求自定義
# client端
# 客戶端啟動之后
# 選擇 上傳操作 還是 下載操作
# 如果是上傳操作 : 輸入要上傳的文件路徑
# 基礎需求 :直接將文件上傳到默認目錄
# 進階需求 :將文件上傳到指定目錄
# 如果是下載文件 : 輸入要下載的文件路徑
# 基礎需求 : 直接將文件下載到當前目錄
# 進階需求 :將文件下載到指定目錄
# 字符串
# 文件 - 讀文件 轉碼 寫文件
# 默寫 TCP UDP 文件夾中的代碼
# 完成一個上傳和下載文件的小程序
# server端 :根據客戶端需求自定義
# client端
# 客戶端啟動之后
# 選擇 上傳操作 還是 下載操作
# 如果是上傳操作 : 輸入要上傳的文件路徑
# 基礎需求 :直接將文件上傳到默認目錄
# 進階需求 :將文件上傳到指定目錄
# 如果是下載文件 : 輸入要下載的文件路徑
# 基礎需求 : 直接將文件下載到當前目錄
# 進階需求 :將文件下載到指定目錄
# 字符串
# 文件 - 讀文件 轉碼 寫文件
# 默寫 TCP UDP 文件夾中的代碼
# 完成一個上傳和下載文件的小程序
# server端 :根據客戶端需求自定義
# client端
# 客戶端啟動之后
# 選擇 上傳操作 還是 下載操作
# 如果是上傳操作 : 輸入要上傳的文件路徑
# 基礎需求 :直接將文件上傳到默認目錄
# 進階需求 :將文件上傳到指定目錄
# 如果是下載文件 : 輸入要下載的文件路徑
# 基礎需求 : 直接將文件下載到當前目錄
# 進階需求 :將文件下載到指定目錄
# 字符串
# 文件 - 讀文件 轉碼 寫文件
server端
import json
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
conn,addr = sk.accept()
content = conn.recv(1024).decode('utf-8')
content_dic = json.loads(content)
if content_dic['operate'] == 'upload':
conn.send(b'received!')
with open(content_dic['filename'],'wb') as f:
while content_dic['filesize']:
file = conn.recv(1024)
f.write(file)
content_dic['filesize'] -= len(file)
conn.close()
sk.close()
client端
import os
import json
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
def get_filename(file_path):
filename = os.path.basename(file_path)
return filename
#選擇 操作
operate = ['upload','download']
for num,opt in enumerate(operate,1):
print(num,opt)
num = int(input('請輸入您要做的操作序號 : '))
if num == 1:
'''上傳操作'''
#file_path = 'E:\python10\day33\作業.py'
file_path = input('請輸入要上傳的文件路徑 : ')
# 告訴對方要上傳的文件的名字
file_name = get_filename(file_path)
# 讀要上傳的文件 存成字符串
with open(file_path,encoding='utf-8') as f:
content = f.read()
dic = {'operate':'upload','filename':file_name,'content':content}
# 將字符串send給server端
str_dic = json.dumps(dic)
sk.send(str_dic.encode('utf-8'))
# server端接收 bytes轉碼程字符串
# server端打開文件 寫文件
elif num == 2:
'''下載操作'''
sk.close()