python 이 socket 을 통 해 파일 을 보 내 는 인 스 턴 스 코드

3833 단어 pythonsocket문건
디 렉 터 리 구조:

client:

#!/usr/bin/env python
# -*-coding:utf-8 -*-
import socket, struct, json
download_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 socket
import subprocess
import struct
import json
import os
share_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 폴 더 에 보 낼 수 있 습 니 다.
그림,동 영상,문 자 는 모두 보 낼 수 있 습 니 다.바 이 너 리 파일 을 전송 하기 때 문 입 니 다.
원 리 는 서버 쪽 에서 파일 을 읽 는 형식 으로 열 고 클 라 이언 트 쪽 에서 쓰 는 방식 으로 파일 을 열 고 클 라 이언 트 쪽 에서 한 줄 한 줄 의 바 이 너 리 를 파일 에 기록 해서 저장 하면 된다 는 것 이다.
총결산
위 에서 말 한 것 은 소 편 이 소개 한 python 이 socket 을 통 해 파일 을 보 내 는 인 스 턴 스 코드 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기