亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實現(xiàn)簡單的tcp 文件下載

 更新時間:2020年09月16日 08:25:52   作者:小名叫小明  
這篇文章主要介紹了python如何實現(xiàn)簡單的tcp文件下載,幫助大家更好的理解和學習python,感興趣的朋友可以了解下

什么是下載?

首先客戶端會問服務器,有沒有一個xxx的文件???服務器開始尋找,找到后對客戶端說有,然后客戶端在本地新建一個文件,客戶端從服務器收到一點數(shù)據(jù),就寫進這個文件中,再收到一點數(shù)據(jù),再寫入這個文件中,只要把所有的接收到的數(shù)據(jù)都寫入到這個文件中,就完成了下載的操作。

所以下載需要2個部分。服務器的發(fā)送方和客戶端的接收方。

我們這里不考慮復雜的情況。什么限速啊,驗證啊,文件大小......只實現(xiàn)最簡單的邏輯。

客戶端參考代碼

import socket

def main():

  # 創(chuàng)建socket
  tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  # 目的信息
  server_ip = input("請輸入服務器ip:")
  server_port = int(input("請輸入服務器port:"))

  # 鏈接服務器
  tcp_client_socket.connect((server_ip, server_port))

  # 輸入需要下載的文件名
  file_name = input("請輸入要下載的文件名:")

  # 發(fā)送文件下載請求
  tcp_client_socket.send(file_name.encode("utf-8"))

  # 接收對方發(fā)送過來的數(shù)據(jù),最大接收1024個字節(jié)(1K)
  recv_data = tcp_client_socket.recv(1024)
  # 如果接收到數(shù)據(jù)再創(chuàng)建文件,否則不創(chuàng)建
  if recv_data:
    with open("[接收]"+file_name, "wb") as f:
      f.write(recv_data)

  # 關閉套接字
  tcp_client_socket.close()


if __name__ == "__main__":
  main()

服務端參考代碼

import socket
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])

  # 創(chuàng)建socket
  tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 本地信息
  address = ('', port)
  # 綁定本地信息
  tcp_server_socket.bind(address)
  # 將主動套接字變?yōu)楸粍犹捉幼?
  tcp_server_socket.listen(128)

  while True:
    # 等待客戶端的鏈接,即為這個客戶端發(fā)送文件
    client_socket, clientAddr = tcp_server_socket.accept()
    # 接收對方發(fā)送過來的數(shù)據(jù)
    recv_data = client_socket.recv(1024) # 接收1024個字節(jié)
    file_name = recv_data.decode("utf-8")
    print("對方請求下載的文件名為:%s" % file_name)
    file_content = get_file_content(file_name)
    # 發(fā)送文件的數(shù)據(jù)給客戶端
    # 因為獲取打開文件時是以rb方式打開,所以file_content中的數(shù)據(jù)已經(jīng)是二進制的格式,因此不需要encode編碼
    if file_content:
      client_socket.send(file_content)
    # 關閉這個套接字
    client_socket.close()

  # 關閉監(jiān)聽套接字
  tcp_server_socket.close()


if __name__ == "__main__":
  main()

以上就是python實現(xiàn)簡單的tcp文件下載的詳細內容,更多關于python tcp下載的資料請關注腳本之家其它相關文章!

相關文章

最新評論