欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 通過(guò) socket 發(fā)送文件的實(shí)例代碼

 更新時(shí)間:2018年08月14日 15:08:28   作者:郭東東郭  
這篇文章主要介紹了python 通過(guò) socket 發(fā)送文件的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

目錄結(jié)構(gòu):

client:

#!/usr/bin/env python
# -*-coding:utf-8 -*-
import socket, struct, json
download_dir = r'D:\Python\python_learning\gd\code\part3\02網(wǎng)絡(luò)編程\文件傳輸\client\download'
gd_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
gd_client.connect(('127.0.0.1',8123))

while True:

 #1、發(fā)命令
  cmd=input('>>: ').strip() #get a.txt
  if not cmd:continue
  gd_client.send(cmd.encode('utf-8'))
  #2、以寫(xiě)的方式打開(kāi)一個(gè)新文件,接收服務(wù)端發(fā)來(lái)的文件的內(nèi)容寫(xiě)入客戶(hù)的新文件
  #第一步:先收?qǐng)?bào)頭的長(zhǎng)度
  obj=gd_client.recv(4)
  header_size=struct.unpack('i',obj)[0]
  # 第二步:再收?qǐng)?bào)頭
  header_bytes = gd_client.recv(header_size)
  # 第三步:從報(bào)頭中解析出對(duì)真實(shí)數(shù)據(jù)的描述信息
  header_json = header_bytes.decode('utf-8')
  header_dic = json.loads(header_json)
  '''
  header_dic = {
    'filename': filename, # 1.txt
    'file_size': os.path.getsize(r'%s\%s' % (share_dir, filename)) # 路徑/1.txt
  }  
  '''
  total_size = header_dic['file_size']
  file_name = header_dic['filename']
  # 第四步:接收真實(shí)的數(shù)據(jù)
  with open(r'%s\%s'%(download_dir, file_name),'wb') as f:
    recv_size = 0
    while recv_size < total_size:
      line = gd_client.recv(1024)
      f.write(line)
      recv_size += len(line)
      print('總大?。?s  已下載大?。?s' % (total_size, recv_size))
gd_client.close()​

server:

#!/usr/bin/env python
# -*-coding:utf-8 -*-
import socket
import subprocess
import struct
import json
import os
share_dir = r'D:\Python\python_learning\gd\code\part3\02網(wǎng)絡(luò)編程\文件傳輸\server\share'
gd_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
gd_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
gd_server.bind(('127.0.0.1', 8123)) # 0-65535: 0-1024給操作系統(tǒng)使用
gd_server.listen(5)
while True:
  conn, client_addr = gd_server.accept()
  while True: # 通信循環(huán)
    try:
      # 1、收命令
      res = conn.recv(8096) # b'get 1.txt'
      if not res: break # 適用于linux操作系統(tǒng)
      # 2、解析命令,提取相應(yīng)命令參數(shù)
      cmds = res.decode('utf-8').split() # ['get','1.txt']
      filename = cmds[1]
      # 3、以讀的方式打開(kāi)文件,讀取文件內(nèi)容發(fā)送給客戶(hù)端
      # 第一步:制作固定長(zhǎng)度的報(bào)頭
      header_dic = {
        'filename': filename, # 1.txt
        'file_size':os.path.getsize(r'%s\%s'%(share_dir, filename)) # 路徑/1.txt
      }
      header_json = json.dumps(header_dic)
      header_bytes = header_json.encode('utf-8')
      # 第二步:先發(fā)送報(bào)頭的長(zhǎng)度
      conn.send(struct.pack('i',len(header_bytes)))
      # 第三步:再發(fā)報(bào)頭
      conn.send(header_bytes)
      # 第四步:再發(fā)送真實(shí)的數(shù)據(jù)
      with open('%s/%s'%(share_dir, filename),'rb') as f:
        for line in f:
          conn.send(line)
    except ConnectionResetError: # 適用于windows操作系統(tǒng)
      break
  conn.close()
gd_server.close()​

命令輸入: get 1.txt ,然后即可將 server 端的 share文件內(nèi)的 1.txt 文件 發(fā)送到 client 端的 download文件夾下

圖片、視頻、文字都可以發(fā)送,因?yàn)閭魉偷氖?二進(jìn)制文件

原理是:server 端以讀的形式打開(kāi)文件,client端以寫(xiě) 的方式打開(kāi)文件,然后client端把 一條一條的二進(jìn)制寫(xiě)入文件后保存即可。

總結(jié)

以上所述是小編給大家介紹的python 通過(guò) socket 發(fā)送文件的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 對(duì)python產(chǎn)生隨機(jī)的二維數(shù)組實(shí)例詳解

    對(duì)python產(chǎn)生隨機(jī)的二維數(shù)組實(shí)例詳解

    今天小編就為大家分享一篇對(duì)python產(chǎn)生隨機(jī)的二維數(shù)組實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python實(shí)現(xiàn)指定范圍內(nèi)篩選并剔除Excel表格中的數(shù)據(jù)

    Python實(shí)現(xiàn)指定范圍內(nèi)篩選并剔除Excel表格中的數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)在指定范圍內(nèi)篩選并剔除Excel表格中的數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2023-06-06
  • Python內(nèi)置函數(shù)及功能簡(jiǎn)介匯總

    Python內(nèi)置函數(shù)及功能簡(jiǎn)介匯總

    這篇文章主要介紹了Python內(nèi)置函數(shù)及功能簡(jiǎn)介匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python實(shí)現(xiàn)CET查分的方法

    Python實(shí)現(xiàn)CET查分的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)CET查分的方法,實(shí)例分析了Python操作鏈接查詢(xún)的技巧,需要的朋友可以參考下
    2015-03-03
  • 一勞永逸徹底解決pip install慢的辦法

    一勞永逸徹底解決pip install慢的辦法

    經(jīng)常在使用Python的時(shí)候需要安裝各種模塊,而pip是很強(qiáng)大的模塊安裝工具,這篇文章主要給大家介紹了一個(gè)可以一勞永逸徹底解決pip install慢的辦法,需要的朋友可以參考下
    2021-05-05
  • 基于python實(shí)現(xiàn)KNN分類(lèi)算法

    基于python實(shí)現(xiàn)KNN分類(lèi)算法

    這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)KNN分類(lèi)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python函數(shù)的參數(shù)列表解析

    Python函數(shù)的參數(shù)列表解析

    這篇文章主要介紹了Python函數(shù)的參數(shù)列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python好玩的項(xiàng)目—色情圖片識(shí)別代碼分享

    python好玩的項(xiàng)目—色情圖片識(shí)別代碼分享

    這篇文章主要介紹了python好玩的項(xiàng)目—色情圖片識(shí)別,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Python入門(mén)之集合的使用教程

    Python入門(mén)之集合的使用教程

    在Python中,集合(Set)?是一個(gè)無(wú)序、不重復(fù)的序列,它不支持索引。本文將通過(guò)示例為大家詳細(xì)講講Python中集合是使用,需要的可以參考一下
    2022-09-09
  • python利用openpyxl拆分多個(gè)工作表的工作簿的方法

    python利用openpyxl拆分多個(gè)工作表的工作簿的方法

    這篇文章主要介紹了python利用openpyxl拆分多個(gè)工作表的工作簿的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論