Cliente/Servidor Usando Python
Publicado por Vanderson Lucio Rodrigues 12/12/2005
[ Hits: 18.668 ]
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)
Descubra seu IP através do MeuIP
Navegando em formulários com login e senha
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
VMs e Interfaces de Rede desapareceram (12)
Instalação do drive do adaptador wiffi (7)