Envio e recebimento de arquivos em Python
Publicado por Fagner Amaral de Souza Candido (última atualização em 14/12/2010)
[ Hits: 25.448 ]
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()
Tradutor on-line versão Web!!!
HCrawler 3.0 - crawler escrito em Python 3
Downloader modo texto - Python 3
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Sinto uma leve lentidão ao arrastar, miniminizar e restauras as janela... (3)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (4)
Ajuda Pra Melhoria do NFTABLES. (8)
Pastas da raiz foram para a área de trabalho [RESOLVIDO] (7)