Descrição
Este e um cliente escrito em Linguagem Pythpn, o qual utiliza chamadas de
sockets para comunicao com o servidor.
O Cliente nesse caso possui 3 tarefas principais:
1 - Enviar o nome do arquivo a ser transferido;
2 - Enviar o Tamanho do Arquivo a ser transferido;
3 - Enviar o os dados contidos no arquivo.
Ps.: Vou está disponibilzando um servidor pra tratar as requisições desse cliente usando C.
[ Download:
pyclient.py ]
[
Enviar nova versão ]
[ Esconder código-fonte ]
#!/usr/bin/python
"""
@file: pyclient.py
Este e um cliente escrito em Linguagem Pythpn, o qual utiliza chamadas de
sockets
para comunicao com o servidor.
O Cliente nesse caso possui 3 tarefas principais:
1 - Enviar o nome do arquivo a ser transferido;
2 - Enviar o Tamanho do Arquivo a ser transferido;
3 - Enviar o os dados contidos no arquivo.
"""
from socket import *
import time
import sys
import stat
import os
import string
def safeSend(s, msg, BUF_SIZE):
"""
Esse funcao tenta enviar os dados para o servidor
De forma mais confiavel.
"""
sent = 0
while msg:
print '...\r'
i = s.send(msg, BUF_SIZE)
if i == -1:
return -1
sent += i
msg = msg[i:]
time.sleep(3)
return sent
def GetNome(entrada):
"""
Essa Funcao, tem por finalidade, tratar o nome do arquivo
para que o mesmo possas ser enviado sem as '/'.
Ah, dava pra ser bem melhor essa funcao. :(
"""
a = 0
count = 0
temp = ''
inverso = ''
arq = ''
for i in entrada:
if entrada[a] == '/':
count +=1
a += 1
if count == 0:
return entrada
sys.exit(1)
for j in entrada:
temp += entrada[a-1]
a -= 1
a = 0
while temp[a] != '/':
inverso += temp[a]
a += 1
t = len(inverso)
c = t
while c > 0 :
arq += inverso[c - 1]
c -= 1
return arq
def main(argv):
"""
Este e o programa principal, no qual sao realizadas as chamadas de
funcoes e feito os principais processametos do programa.
"""
if len(argv) < 3:
print "Uso: pyclient [servidor] [arquivo] [porta] "
raise SystemExit
# Valores Default
BUF_SIZE = 4096
now = time.time()
print "Ola, hoje: ",time.ctime(now)
server = argv[1]
porta = int(argv[3])
arquivo_io = argv[2]
file_name = GetNome(arquivo_io)
# Tentar abrir o arquivo
try:
fd = open(arquivo_io, 'r')
# Atribui o tamanho do arquivo
file_size = str((os.stat(arquivo_io)[stat.ST_SIZE]) / 1024)
msg = fd.read()
fd.close()
except IOError:
print "Arquivo nao encontrado: ", arquivo_io
sys.exit(1)
# Tenta pegar o IP do Servidor
try:
h = gethostbyname(server)
except Exception, e:
print "Nao foi Possivel Encontrar: ", server
sys.exit(1)
# Tenta criar socket
try:
s = socket(AF_INET, SOCK_STREAM)
except Exception, e:
print "Nao foi Possivel Criar Socket"
sys.exit(1)
try:
s.connect((h, porta))
except Exception, e:
print "Falha na Conexao com Servidor"
# Envia os dados, nome e tamanho do arquivo
print 'Status: Enviando os dados...\r'
safeSend(s, file_name, BUF_SIZE)
safeSend(s, file_size, BUF_SIZE)
safeSend(s, msg, BUF_SIZE)
print "bye."
if __name__ == "__main__":
main(sys.argv)
Scripts recomendados
X-Chat 2 MultiMsg
Transforma código de barras
Tradutor on-line em Python+GTK
Cotação atual do dólar - versão Python
Bot que baixa o KDE 3.4 e a QT para o Slackware 10.1
Comentários
| Nenhum comentário foi encontrado. |