associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "TransferirArquivosViaSockets"

Diferenças entre as versões de 3 e 10 (7 versões de distância)
Revisão 3e 2006-02-09 22:08:33
Tamanho: 1373
Comentário:
Revisão 10e 2008-09-26 14:07:17
Tamanho: 1366
Editor: localhost
Comentário: converted to 1.6 markup
Deleções são marcadas assim. Adições são marcadas assim.
Linha 1: Linha 1:
Depois de muito penar em sockets, tive uma luz com "el Bog", vou postar um pequeno exemplo de como transferir arquivos por sockets. Depois de muito penar em sockets, tive uma luz, e vou postar um pequeno exemplo de como transferir arquivos por sockets.
Linha 5: Linha 5:
no servidor que vai receber o arquivo "foo.tar.gz"
No servidor que vai receber o arquivo "foo.tar.gz"
Linha 8: Linha 7:
#!python
Linha 12: Linha 12:
HOST= PORT=57000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((HOST,PORT)) s.listen(1)
HOST = ''
PORT = 57000
Linha 15: Linha 15:
conn,addr= s.accept() 
arq = open('/home/backup/foo.tar.gz','w')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)

conn, addr = s.accept()
arq = open('/home/backup/foo.tar.gz', 'w')
Linha 19: Linha 23:

dados=conn.recv(1024) 
    dados = conn.recv(1024)
Linha 22: Linha 25:
    break      break
Linha 25: Linha 28:
arq.close()  arq.close()
Linha 27: Linha 30:
}}}
Linha 28: Linha 32:
no cliente, ele vai enviar um arquivo "financeiro.tar.gz" para o servidor que está escutando na porta 57000, onde quando for conectar pela função connect, tudo que for "enviado" para o servidor, será executado a baixo do accept() (pelo que eu li no docs do python.org)

#client_sock.py 
No cliente, ele vai enviar um arquivo "financeiro.tar.gz" para o servidor que está escutando na porta 57000, onde quando for conectar pela função connect, tudo que for "enviado" para o servidor, será executado abaixo do accept():
{{{
#!python
#
client_sock.py
Linha 33: Linha 38:
HOST='localhost' #coloca o host do servidor 
PORT=57000
HOST = 'localhost' #coloca o host do servidor
PORT = 57000
Linha 36: Linha 41:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
Linha 38: Linha 43:
s.connect((HOST,PORT)) 
arq=open('/home/departamentos/financeiro/financeiro.tar.gz','r')
s.connect((HOST,PORT))
arq = open('/home/departamentos/financeiro/financeiro.tar.gz', 'r')
Linha 42: Linha 47:
    socket.send(i)     s.send(i)
Linha 44: Linha 49:
arq.close()  arq.close()
Linha 53: Linha 58:
Carlos Augusto Pacheco [MAILTO] c.augusto@paxeco.com.br  Carlos Augusto Pacheco [MAILTO] c.augusto@paxeco.com.br

Depois de muito penar em sockets, tive uma luz, e vou postar um pequeno exemplo de como transferir arquivos por sockets.

A idéia é não depender de serviços como FTP, SSH, samba para transferir um arquivo (por exemplo um backup remoto).

No servidor que vai receber o arquivo "foo.tar.gz"

   1 #serv_sock.py
   2 
   3 import socket
   4 
   5 HOST = ''
   6 PORT = 57000
   7 
   8 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   9 s.bind((HOST, PORT))
  10 s.listen(1)
  11 
  12 conn, addr = s.accept()
  13 arq = open('/home/backup/foo.tar.gz', 'w')
  14 
  15 while 1:
  16     dados = conn.recv(1024)
  17     if not dados:
  18         break
  19     arq.write(dados)
  20 
  21 arq.close()
  22 conn.close()

No cliente, ele vai enviar um arquivo "financeiro.tar.gz" para o servidor que está escutando na porta 57000, onde quando for conectar pela função connect, tudo que for "enviado" para o servidor, será executado abaixo do accept():

   1 #client_sock.py
   2 import socket
   3 
   4 HOST = 'localhost' #coloca o host do servidor
   5 PORT = 57000
   6 
   7 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   8 
   9 s.connect((HOST,PORT))
  10 arq = open('/home/departamentos/financeiro/financeiro.tar.gz', 'r')
  11 
  12 for i in arq.readlines():
  13     s.send(i)
  14 
  15 arq.close()
  16 s.close()

#fim

espero que ajude alguma coisa.

Carlos Augusto Pacheco [MAILTO] c.augusto@paxeco.com.br

Volta para CookBook.