最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

什么是下載?

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

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

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

客戶端參考代碼

import socket

def main():

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

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

  # 鏈接服務(wù)器
  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)

  # 關(guān)閉套接字
  tcp_client_socket.close()


if __name__ == "__main__":
  main()

服務(wù)端參考代碼

import socket
import sys


def get_file_content(file_name):
  """獲取文件的內(nèi)容"""
  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)是二進(jìn)制的格式,因此不需要encode編碼
    if file_content:
      client_socket.send(file_content)
    # 關(guān)閉這個套接字
    client_socket.close()

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


if __name__ == "__main__":
  main()

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

相關(guān)文章

  • pyhton列表轉(zhuǎn)換為數(shù)組的實例

    pyhton列表轉(zhuǎn)換為數(shù)組的實例

    下面小編就為大家分享一篇pyhton列表轉(zhuǎn)換為數(shù)組的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python使用插值法畫出平滑曲線

    python使用插值法畫出平滑曲線

    這篇文章主要為大家詳細(xì)介紹了python使用插值法畫出平滑曲線,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • keras小技巧——獲取某一個網(wǎng)絡(luò)層的輸出方式

    keras小技巧——獲取某一個網(wǎng)絡(luò)層的輸出方式

    這篇文章主要介紹了keras小技巧——獲取某一個網(wǎng)絡(luò)層的輸出方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python數(shù)據(jù)分析之Excel和Text文件的讀寫操作方法

    Python數(shù)據(jù)分析之Excel和Text文件的讀寫操作方法

    Python操作Excel分為兩個主要形式,讀寫和交互式操作,可以用不同的第三方工具,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)分析之Excel和Text文件的讀寫操作方法,需要的朋友可以參考下
    2024-08-08
  • python讀取npy文件數(shù)據(jù)實例

    python讀取npy文件數(shù)據(jù)實例

    npy文件用于存儲重建ndarray所需的數(shù)據(jù)、圖形、dtype?和其他信息,下面這篇文章主要給大家介紹了關(guān)于python讀取npy文件數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Python利用標(biāo)簽實現(xiàn)清理微信好友的自動化腳本

    Python利用標(biāo)簽實現(xiàn)清理微信好友的自動化腳本

    微信已經(jīng)成為我們?nèi)粘I钪胁豢苫蛉钡纳缃还ぞ?隨著使用時間的增長,我們的微信好友列表可能會變得越來越臃腫,所以本文為大家準(zhǔn)備了通過標(biāo)簽清理微信好友的Python自動化腳本,希望對大家有所幫助
    2024-12-12
  • python中json格式處理和字典的關(guān)系

    python中json格式處理和字典的關(guān)系

    今天我們先講一下編寫python腳本處理json的核心功能,有些散亂,后期在進(jìn)行整體腳本的編寫,對python?json字典關(guān)系相關(guān)知識感興趣的朋友一起看看吧
    2022-06-06
  • Pycharm小白級簡單使用教程

    Pycharm小白級簡單使用教程

    pycharm是一種Python IDE,能夠幫助我們在編寫代碼時提高效率。 這篇文章主要介紹了Pycharm小白級簡單使用教程,需要的朋友可以參考下
    2020-01-01
  • 最新評論

    滁州市| 礼泉县| 龙胜| 邮箱| 靖边县| 沙洋县| 吉林省| 宜春市| 太康县| 镇赉县| 牙克石市| 张掖市| 天镇县| 枣阳市| 黄平县| 冕宁县| 利辛县| 宁晋县| 揭阳市| 江都市| 石楼县| 苍山县| 财经| 新巴尔虎右旗| 格尔木市| 老河口市| 甘南县| 大埔县| 阳江市| 武城县| 乐都县| 通道| 潍坊市| 平武县| 思南县| 大安市| 祁阳县| 抚宁县| 毕节市| 乌兰察布市| 讷河市|