Cliente/Servidor Usando Python
Publicado por Vanderson Lucio Rodrigues 12/12/2005
[ Hits: 18.609 ]
Homepage: http://www.vandersongold.com.br
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.
#!/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)
EVOSIGN - Assinatura aleatória no Evolution
Bot que baixa o KDE 3.4 e a QT para o Slackware 10.1
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Vou voltar moderar conteúdos de Dicas e Artigos (1)
SysAdmin ou DevOps: Qual curso inicial pra essa área? (3)
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta