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

Diferenças para "TransferirArquivosViaSockets"

Diferenças entre as versões de 1 e 8 (7 versões de distância)
Revisão 1e 2006-02-09 14:09:20
Tamanho: 1411
Comentário:
Revisão 8e 2006-08-17 20:27:48
Tamanho: 1349
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 1: Linha 1:
===Transferindo arquivos via sockets===

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 9: Linha 7:
{{{
#!python
Linha 13: Linha 13:
HOST= PORT=57000 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((HOST,PORT)) s.listen(1) HOST= PORT=57000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((HOST,PORT)) s.listen(1)
Linha 15: Linha 16:
conn,addr= s.accept() arq = open('/home/backup/foo.tar.gz','w') conn,addr= s.accept()
arq = open('/home/backup/foo.tar.gz','w')
Linha 19: Linha 21:
    *     dados=conn.recv(1024)
    if not dados:
    break
    arq.write(dados)
Linha 21: Linha 26:
      dados=conn.recv(1024) if not dados:
          o
arq.close()
conn.close()
Linha 24: Linha 29:
            break }}}
Linha 26: Linha 31:
      arq.write(dados) 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()
{{{
#!python
#client_sock.py
import socket
Linha 28: Linha 37:
arq.close() 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 a baixo do accept() (pelo que eu li no docs do python.org)

#client_sock.py import socket

HOST='localhost' #coloca o host do servidor PORT=57000
HOST='localhost' #coloca o host do servidor
PORT=57000
Linha 38: Linha 42:
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 41: Linha 46:
    s.send(i)
Linha 42: Linha 48:
    *

      socket.send(i)

arq.close() s.close()
arq.close()
s.close()
}}}
Linha 49: Linha 53:
Linha 53: Linha 58:

Volta para CookBook.

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= PORT=57000 
   6 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((HOST,PORT)) s.listen(1)
   7 
   8 conn,addr= s.accept() 
   9 arq = open('/home/backup/foo.tar.gz','w')
  10 
  11 while 1:
  12 
  13     dados=conn.recv(1024) 
  14     if not dados:
  15     break
  16     arq.write(dados)
  17 
  18 arq.close() 
  19 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 a baixo 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.