今日內容概述:
TCP 文件下載、線程
今日思維導圖

TCP 文件下載代碼
tcp客戶端
import socket
def main():
# 創建套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 鏈接服務器
client_socket.connect(("192.168.xxx.xxx", 8080))
# 發送要下載的文件名
file_name = input("請輸入要下載的文件名:")
client_socket.send(file_name.encode("utf-8"))
# 接收數據并保存
recv_data = client_socket.recv(1024 * 1024)
# 判斷是否有數據,如果有就進行保存,沒有就就進行提示
# "wb" 是以字節模式進行寫入,軟件會對字節進行解碼
if recv_data:
with open("new_%s" % file_name, "wb") as f:
f.write(recv_data)
print("文件下載成功")
else:
print("文件下載失敗")
# 關閉套接字
client_socket.close(
if __name__ == "__main__":
main()
tcp服務器
import socket
def send_file_content(client_socket, client_addr):
# 接收服務器發送過來的文件,
# 進行判斷有沒有這個文件,如果有就打開文件并讀取
recv_file_name = client_socket.recv(1024).decode("utf-8")
print("客戶端 %s 要下載的文件是 %s" % (client_addr, recv_file_name))
file_content = None
# 把文件的內容發送給客戶端
# 進行異常判斷,出現異常就進行提示
try:
f = open(recv_file_name, "rb")
file_content = f.read()
f.close()
except Exception as result:
# print(result)
print("沒有要下載的 %s 這個文件" % recv_file_name)
# 判斷是否有數據,如果有數據,就進行發送
if file_content:
client_socket.send(file_content)
print("文件傳輸成功"
def main():
# 創建套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 綁定本地信息
server_socket.bind(("", 8080))
# 監聽
server_socket.listen(128)
while True:
# 等待鏈接
client_socket, client_addr = server_socket.accept()
# 調用發送文件數據的函數
send_file_content(client_socket, client_addr)
# 關閉兩個套接字
client_socket.close()
server_socket.close()
if __name__ == "__main__":
main()
執行結果
