Envio e recebimento de arquivos em Python
Publicado por Fagner Amaral de Souza Candido (última atualização em 14/12/2010)
[ Hits: 25.560 ]
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()
hdns - Enumerador de diretórios
Script em Python 3.6 conectando em um API real da web
Conversor de vídeos do YouTube para MP3
Checar valor do bitcoin de acordo com a exchange
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Warcraft II Remastered no Linux? (7)
O programa assinador digital (5)









