1. 程式人生 > 程式設計 >python基於TCP實現的檔案下載器功能案例

python基於TCP實現的檔案下載器功能案例

本文例項講述了python基於TCP實現的檔案下載器功能。分享給大家供大家參考,具體如下:

伺服器 參考程式碼如下:

from socket import *
import sys
def get_file_content(file_name):
  """獲取檔案的內容"""
  try:
    with open(file_name,"rb") as f:
      content = f.read()
    return content
  except:
    print("沒有下載的檔案:%s" % file_name)
def main():
  if len(sys.argv) != 2:
    print("請按照如下方式執行:python3 xxx.py 7890")
    return
  else:
    # 執行方式為python3 xxx.py 7890
    port = int(sys.argv[1])
  # 建立socket
  tcp_server_socket = socket(AF_INET,SOCK_STREAM)
  # 本地資訊
  address = ('',port)
  # 繫結本地資訊
  tcp_server_socket.bind(address)
  # 將主動套接字變為被動套接字
  tcp_server_socket.listen(128)
  while True:
    # 等待客戶端的連結,即為這個客戶端傳送檔案
    client_socket,clientAddr = tcp_server_socket.accept()
    # 接收對方傳送過來的資料
    recv_data = client_socket.recv(1024) # 接收1024個位元組
    file_name = recv_data.decode("utf-8")
    print("對方請求下載的檔名為:%s" % file_name)
    file_content = get_file_content(file_name)
    # 傳送檔案的資料給客戶端
    # 因為獲取開啟檔案時是以rb方式開啟,所以file_content中的資料已經是二進位制的格式,因此不需要encode編碼
    if file_content:
      client_socket.send(file_content)
    # 關閉這個套接字
    client_socket.close()
  # 關閉監聽套接字
  tcp_server_socket.close()
if __name__ == "__main__":
  main()

客戶端 參考程式碼如下:

from socket import *
def main():
  # 建立socket
  tcp_client_socket = socket(AF_INET,SOCK_STREAM)
  # 目的資訊
  server_ip = input("請輸入伺服器ip:")
  server_port = int(input("請輸入伺服器port:"))
  # 連結伺服器
  tcp_client_socket.connect((server_ip,server_port))
  # 輸入需要下載的檔名
  file_name = input("請輸入要下載的檔名:")
  # 傳送檔案下載請求
  tcp_client_socket.send(file_name.encode("utf-8"))
  # 接收對方傳送過來的資料,最大接收1024個位元組(1K)
  recv_data = tcp_client_socket.recv(1024)
  # print('接收到的資料為:',recv_data.decode('utf-8'))
  # 如果接收到資料再建立檔案,否則不建立
  if recv_data:
    with open("[接收]"+file_name,"wb") as f:
      f.write(recv_data)
  # 關閉套接字
  tcp_client_socket.close()
if __name__ == "__main__":
  main()

更多關於Python相關內容可檢視本站專題:《Python Socket程式設計技巧總結》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》及《Python檔案與目錄操作技巧彙總》

希望本文所述對大家Python程式設計有所幫助。