Python:利用Socket實現文件傳輸服務

Socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求,使主機間或者一臺計算機上的進程間可以通訊。
Python:利用Socket實現文件傳輸服務

Python 提供了兩個級別訪問的網絡服務:

  • 低級別的網絡服務支持基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層操作系統Socket接口的全部方法。
  • 高級別的網絡服務模塊 SocketServer, 它提供了服務器中心類,可以簡化網絡服務器的開發。

本次就來演示一下利用Socket做一個文件上傳服務程序

代碼如下:

  • srever端代碼
Python:利用Socket實現文件傳輸服務


  • client端代碼
Python:利用Socket實現文件傳輸服務


  • s.bind() 綁定地址(host, port)到套接字, 在AF_INET下,以元組(host,port)的形式表示地址
  • s.listen() 開始TCP監聽,backlog指定在拒絕連接之前,操作系統可以掛起的最大連接數量。該值至少為0,大部分應用程序設為5就可以了
  • s.connect() 主動初始化TCP服務器連接。一般address的格式為元組(hostname,port),如果連接出錯,返回socket.error錯誤
  • s.recv() 接收TCP數據,數據以字符串形式返回,bufsize指定要接收的最大數據量。flag提供有關消息的其他信息,通常可以忽略
  • s.sendall() 完整發送TCP數據,完整發送TCP數據。將string中的數據發送到連接的套接字,但在返回之前會嘗試發送所有數據。成功返回None,失敗則拋出異常
  • 由於每次發送的數據都有大小限制,因此srever端和client端都分別用了循環接收和循環發送,中止循環條件為發送數據總數或接收數據總數等於文件大小

ps:必須要一收一發,無論哪一端,一個發送數據另一個就必須要收才能正常運行

運行效果如下:

Python:利用Socket實現文件傳輸服務

ps:命令 post|test.mp4 為把當前目錄下的test.mp4 文件上傳,傳輸完成後文件將保存到當前路徑下的data目錄,沒有的話自行創建一下

作者也在學習當中,難免會有錯漏的地方,懇請讀者能給予意見或建議,謝謝!轉載請註明:[learnaLanguage_YiZhou_Python:利用Socket實現文件傳輸服務]


分享到:


相關文章: