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

Diferenças para "TransferirArquivosViaSockets"

Diferenças entre as versões de 8 e 9
Revisão 8e 2006-08-17 20:27:48
Tamanho: 1349
Comentário:
Revisão 9e 2008-06-07 12:18:28
Tamanho: 1366
Editor: AndréCampos
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
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 13: 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 16: 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 20: Linha 23:

dados=conn.recv(1024) 
    dados = conn.recv(1024)
Linha 23: Linha 25:
    break      break
Linha 26: Linha 28:
arq.close()  arq.close()
Linha 28: Linha 30:
Linha 31: 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()  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():
Linha 34: Linha 35:
#client_sock.py  #client_sock.py
Linha 37: Linha 38:
HOST='localhost' #coloca o host do servidor 
PORT=57000
HOST = 'localhost' #coloca o host do servidor
PORT = 57000
Linha 40: Linha 41:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
Linha 42: 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 48: Linha 49:
arq.close()  arq.close()
Linha 57: 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.