TCP文件下載器

一、什麼是下載&with語句

  • 下載: 從服務器Down一個文件。其具體流程是這樣的
  1. 客戶端發送下載的請求(包含要下載的文件唯一標識,比如文件名等)
  2. 服務器接收請求,在文件庫中查找同名文件,發送(以二進制碼流形式)數據流
  3. 客戶端新建一個同名的文件,然後將數據流寫入這個文件
  4. 客戶端保存文件
  • 下面兩個代碼的效果是相同的,也就是說:with語句可以避免讀取寫入報錯。但是不可避免打開報錯(文件不存在時讀取),從代碼結構就可看出。
f = open(“xxx”)try:	
    f.read()/write()	
except:	
    f.close()
with open(“xxx”) as f:
    f.read()/write()
  • 下面我們從簡單的客戶端開始

二、客戶端

  • 客戶端的職責有:
  1. 發送文件名
  2. 新建文件
  3. 接收二進制數據,並寫入,然後保存

1)接收二進制類客戶端

在這裏插入圖片描述

  • 讓網絡調試助手當服務器。用程序發送文件名(擴展名我亂寫的),然後網絡調試助手收到文件名,發送數據(這裏我們假裝服務器打開了文件,直接發送數據過去)
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 出現亂碼是因爲,這裏是二進制文件,拿文本查看器肯定會亂碼(如果是發送一字節的英文,是不會亂碼的)當然,這裏轉碼沒有必要,因爲發送接收都是二進制,而且轉碼很容易報錯。同樣在Linux系統中,通過程序互發,是不會亂碼的。

2)接收文本類客戶端

  • 只要把寫入文件那些代碼改了就行(原理就是先轉碼,再寫入),寫入部分的代碼如下:
    在這裏插入圖片描述
  • 運行效果如下(網絡調試助手和上面的做法一致)
    在這裏插入圖片描述

三、服務器

  • 服務器的職責:
  1. 接收要下載的文件名
  2. 打開相應文件,讀取裏面的內容,併發送
  3. 如果文件名不存在要提醒

在這裏插入圖片描述
在這裏插入圖片描述

  • 自己試下,把接收發送封裝在一個函數內。(之後學習多任務要用到)

四、 兩個程序相互連接

  • 拿寫好的服務器和客戶端相互連接(記得改ip和端口):
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章