Envio e recebimento de arquivos em Python

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

[ Hits: 24.806 ]

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

Script em Python 3.6 conectando em um API real da web

Bot que baixa o KDE 3.4 e a QT para o Slackware 10.1

Git clone simplificado

Wgetter

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


  

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