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

Diferenças para "TransferirArquivosViaSockets"

Diferenças entre as versões de 2 e 3
Revisão 2e 2006-02-09 14:13:02
Tamanho: 1402
Comentário:
Revisão 3e 2006-02-09 22:08:33
Tamanho: 1373
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
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
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((HOST,PORT)) s.listen(1)
Linha 14: Linha 15:
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 18: Linha 20:
    *     dados=conn.recv(1024)
    if not dados:
    break
    arq.write(dados)
Linha 20: Linha 25:
      dados=conn.recv(1024) if not dados:
          o

            break

      arq.write(dados)

arq.close() conn.close()
arq.close()
conn.close()
Linha 31: Linha 30:
#client_sock.py import socket #client_sock.py
import socket
Linha 33: Linha 33:
HOST='localhost' #coloca o host do servidor PORT=57000 HOST='localhost' #coloca o host do servidor
PORT=57000
Linha 37: Linha 38:
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 40: Linha 42:
    socket.send(i)
Linha 41: Linha 44:
    *

      socket.send(i)

arq.close() s.close()
arq.close()
s.close()
}}}
Linha 48: Linha 49:
}}}

Depois de muito penar em sockets, tive uma luz com "el Bog", 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"

#serv_sock.py

import socket

HOST= PORT=57000 
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')

while 1:

    dados=conn.recv(1024) 
    if not dados:
    break
    arq.write(dados)

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

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect((HOST,PORT)) 
arq=open('/home/departamentos/financeiro/financeiro.tar.gz','r')

for i in arq.readlines():
    socket.send(i)

arq.close() 
s.close()

#fim

espero que ajude alguma coisa.

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

Volta para CookBook.