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

首頁(yè) > 編程 > Python > 正文

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

2020-02-15 22:45:11
字體:
供稿:網(wǎng)友

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

client:

#!/usr/bin/env python# -*-coding:utf-8 -*-import socket, struct, jsondownload_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、以寫的方式打開一個(gè)新文件,接收服務(wù)端發(fā)來的文件的內(nèi)容寫入客戶的新文件  #第一步:先收?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 socketimport subprocessimport structimport jsonimport osshare_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、以讀的方式打開文件,讀取文件內(nèi)容發(fā)送給客戶端      # 第一步:制作固定長(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()​            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌兰察布市| 黎平县| 安达市| 锦屏县| 永定县| 聂拉木县| 上高县| 班戈县| 穆棱市| 新密市| 华容县| 汕尾市| 陆河县| 常熟市| 唐山市| 凤城市| 玉田县| 宁津县| 芜湖县| 清原| 邛崃市| 龙井市| 江城| 米泉市| 南雄市| 雷山县| 长宁县| 轮台县| 锡林郭勒盟| 建始县| 彭州市| 庐江县| 宿松县| 泽普县| 汶川县| 横峰县| 山西省| 洛扎县| 临汾市| 阳城县| 保定市|