Cliente/Servidor Usando Python
Publicado por Vanderson Lucio Rodrigues 12/12/2005
[ Hits: 18.625 ]
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)
Cotação do Dólar com requests_html
Script que obtém informações disponibilizadas a bots pelos sites
Conversor de vídeos do YouTube para MP3
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (16)
Arch Linux - Guia para Iniciantes (2)
Problemas ao instalar o PHP (11)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)