Envio e recebimento de arquivos em Python
Publicado por Fagner Amaral de Souza Candido (última atualização em 14/12/2010)
[ Hits: 25.629 ]
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()
Script em Python 3.6 conectando em um API real da web
Conversor de vídeos do YouTube para MP3
Bluefin - A nova geração de ambientes de trabalho Linux
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Quer auto-organizar janelas (tiling) no seu Linux? Veja como no Plasma 6 e no Gnome
Copiando caminho atual do terminal direto para o clipboard do teclado
Script de montagem de chroot automatica
Conky não mostra temperaturas da CPU no notebook (0)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (0)









