Socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求,使主機間或者一臺計算機上的進程間可以通訊。
Python 提供了兩個級別訪問的網絡服務:
- 低級別的網絡服務支持基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層操作系統Socket接口的全部方法。
- 高級別的網絡服務模塊 SocketServer, 它提供了服務器中心類,可以簡化網絡服務器的開發。
本次就來演示一下利用Socket做一個文件上傳服務程序
代碼如下:
- srever端代碼
- client端代碼
- 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:必須要一收一發,無論哪一端,一個發送數據另一個就必須要收才能正常運行
運行效果如下:
ps:命令 post|test.mp4 為把當前目錄下的test.mp4 文件上傳,傳輸完成後文件將保存到當前路徑下的data目錄,沒有的話自行創建一下
作者也在學習當中,難免會有錯漏的地方,懇請讀者能給予意見或建議,謝謝!轉載請註明:[learnaLanguage_YiZhou_Python:利用Socket實現文件傳輸服務]
閱讀更多 learnaLanguage 的文章