国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python 通過 socket 發送文件的實例代碼

2020-01-04 14:57:00
字體:
來源:轉載
供稿:網友

目錄結構:

python,socket,發送文件,代碼

client:

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

while True:

 #1、發命令  cmd=input('>>: ').strip() #get a.txt  if not cmd:continue  gd_client.send(cmd.encode('utf-8'))  #2、以寫的方式打開一個新文件,接收服務端發來的文件的內容寫入客戶的新文件  #第一步:先收報頭的長度  obj=gd_client.recv(4)  header_size=struct.unpack('i',obj)[0]  # 第二步:再收報頭  header_bytes = gd_client.recv(header_size)  # 第三步:從報頭中解析出對真實數據的描述信息  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']  # 第四步:接收真實的數據  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 socketimport subprocessimport structimport jsonimport osshare_dir = r'D:/Python/python_learning/gd/code/part3/02網絡編程/文件傳輸/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給操作系統使用gd_server.listen(5)while True:  conn, client_addr = gd_server.accept()  while True: # 通信循環    try:      # 1、收命令      res = conn.recv(8096) # b'get 1.txt'      if not res: break # 適用于linux操作系統      # 2、解析命令,提取相應命令參數      cmds = res.decode('utf-8').split() # ['get','1.txt']      filename = cmds[1]      # 3、以讀的方式打開文件,讀取文件內容發送給客戶端      # 第一步:制作固定長度的報頭      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')      # 第二步:先發送報頭的長度      conn.send(struct.pack('i',len(header_bytes)))      # 第三步:再發報頭      conn.send(header_bytes)      # 第四步:再發送真實的數據      with open('%s/%s'%(share_dir, filename),'rb') as f:        for line in f:          conn.send(line)    except ConnectionResetError: # 適用于windows操作系統      break  conn.close()gd_server.close()?

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

圖片、視頻、文字都可以發送,因為傳送的是 二進制文件

原理是:server 端以讀的形式打開文件,client端以寫 的方式打開文件,然后client端把 一條一條的二進制寫入文件后保存即可。

總結

以上所述是小編給大家介紹的python 通過 socket 發送文件的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安岳县| 柳林县| 东丰县| 贺兰县| 天全县| 英山县| 阜城县| 虞城县| 武山县| 遂溪县| 固始县| 静乐县| 普洱| 武宣县| 广西| 平度市| 科技| 高邮市| 南充市| 平陆县| 铜陵市| 郸城县| 山丹县| 汶川县| 东平县| 宜春市| 上饶县| 达拉特旗| 丰县| 松桃| 临沂市| 裕民县| 开化县| 务川| 建瓯市| 武宣县| 东阳市| 探索| 犍为县| 禹城市| 开化县|