Envio e recebimento de arquivos em Python
Publicado por Fagner Amaral de Souza Candido (última atualização em 14/12/2010)
[ Hits: 25.172 ]
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.
''' 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()
Cotação do Dólar com requests_html
HCrawler 3.0 - crawler escrito em Python 3
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Vou voltar moderar conteúdos de Dicas e Artigos (1)
SysAdmin ou DevOps: Qual curso inicial pra essa área? (3)
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta