Envio e recebimento de arquivos em Python
Publicado por Fagner Amaral de Souza Candido (última atualização em 14/12/2010)
[ Hits: 25.369 ]
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 em Python+GTK
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (1)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental ... (2)
compilação samba 4.22 rock linux 9.5 (3)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)