Envio e recebimento de arquivos em Python

Publicado por Fagner Amaral de Souza Candido (última atualização em 14/12/2010)

[ Hits: 25.160 ]

Homepage: https://github.com/fagnercandido

Download pythonArquivos.tar.gz




Olá PessoALL,

Diversas vezes vi em fóruns e sites, a galera pedindo exemplos de troca de arquivos entre máquinas, fazendo uso da rede e em alguma linguagem de programação.

A solução aqui proposta é muito simples: uma aplicação cliente-servidor. O cliente se conecta ao servidor e envia o arquivo para o servidor. O servidor por sua vez, salva no local de sua execução o arquivo enviado, com o mesmo nome enviado pelo cliente. Tudo isso é feito usando a linguagem Python, usando a API de sockets e usando conexões TCP.

Outro detalhe que vale ser ressaltado é que o aplicativo foi testado em localhost e em máquinas separadas, neste segundo caso, foram usadas máquinas virtuais na mesma rede.

Qualquer dúvida, sugestão ou crítica sempre serão bem-vindas.

  



Esconder código-fonte

'''
   Sintese
      Objetivo : Cliente para envio/recebimento de arquivos
      Entrada : Um possivel arquivo
      Saida : Um possivel arquivo
      Autor : f_Candido - fagner7777777@gmail.com
'''

import socket


class Client:

   '''
      Construtor
      host - Servidor para conexoes
      port - Porta para conexao
      tcp - Conexao TCP que sera aberta
      dest - Destino para conexao
   '''
   def __init__(self):   
      print __doc__
      self._host = '127.0.0.1'     # Endereco IP do Servidor
      self._port = 7777            # Porta que o Servidor esta
      self._tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      self._dest = (self._host, self._port)
      self._tcp.connect(self._dest)
      self._nameFile = 'teste.doc'
   '''
      Fechando a conexao TCP
   '''

   def closeConnection(self):
      self._tcp.close()
      
   '''
      Enviando o arquivo
   '''

   def sendFile(self):
      self._tcp.send (self._texto)

   '''
      Lendo o arquivo do fileSystem
   '''

   def readFile(self):
      self._fileOpen = open(self._nameFile, "r")
      self.mountPackage()
      self._tmp = self._fileOpen.read()
      self._texto = self._texto + self._tmp
      self._fileOpen.close()

   '''   
      E criado uma especie de pacote para envio
      Nele sao enviados o nome do arquivo e seu conteudo
      Tambem e criado uma marcacao para tal : __##
   '''

   def mountPackage(self):
      self._texto = self._nameFile+'__##'
      print self._texto


objClient = Client()
objClient.readFile()
objClient.sendFile()
objClient.closeConnection()
      


'''
   Sintese
      Objetivo : Servidor para envio/recebimento de arquivos
      Entrada : Um possivel arquivo
      Saida : Um possivel arquivo
      Autor : f_Candido - fagner7777777@gmail.com
'''

import socket

class Server():

   '''
      Construtor
      hostServer - Servidor para conexoes
      portServer - Porta para conexao
      tcp - Conexao TCP que sera aberta
      orig - Origem da conexao
   '''
   
   def __init__(self):
      self._hostServer = '127.0.0.1'        # Endereco IP do Servidor
      self._portServer = 7777            # Porta que o Servidor esta
      self._tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      self._orig = (self._hostServer, self._portServer)
      self._tcp.bind(self._orig)
      self._tcp.listen(999999)   
      self._nameFile = ''
      print __doc__
   '''
      Recebido o pacote, ele retira o cabecalho e retorna o real conteudo
   '''
   def breakPackage(self):

      self._tmp = self._msg.split('__##')
      self._nameFile = self._tmp[0]
      self._msg = self._tmp[1]
      
   '''
      Recebe o arquivo
   '''
   def receiveFile(self):
      self._connection, self._client = self._tcp.accept()
      print 'Conectado por', self._client
      while True:
              self._msg = self._connection.recv(4096)
         if not self._msg: break
         self.breakPackage()
         self.writeFile()         
         

   '''
      Escreve o arquivo em disco
   '''
   def writeFile(self):
      self._fileOpen = open(self._nameFile, "w")
      self._fileOpen.write(self._msg)
      self._fileOpen.close()   


   '''
      Fecha a conexao
   '''
   def closeConnection(self):
          self._connection.close()


objServer = Server()
objServer.receiveFile()
objServer.closeConnection()

Scripts recomendados

Conversor de String em Hex para String plana

Script em Python 3.6 para fazer scrape de uma URL exportando métricas no formato Prometheus

Transforma código de barras

Git clone simplificado

Downloader Gráfico - Python 3


  

Comentários
[1] Comentário enviado por linus black em 19/05/2017 - 13:25h

gostei muito bom, mas me explique uma coisa na parte host no cliente esta ip do servidor e no server esta a mesma coisa por que nao seria no cliente o ip do servidor e no server o do cliente des de ja obrigado


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts