Cliente/Servidor Usando Python
Publicado por Vanderson Lucio Rodrigues 12/12/2005
[ Hits: 18.810 ]
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)
Conversor de String em Hex para String plana
Google scan com interface gráfica
Nenhum comentário foi encontrado.
Firewire resiste, Bcachefs sai: destaques Linux do dia
Kernel 6.18 em foco, betas fervilhando e avanços em IA no Linux
O que é o THP na configuração de RAM do Linux e quando desabilitá-lo
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Adicionando o repositório backports no Debian 13 Trixie
Como definir um IP estático no Linux Debian
Como instalar Counter-Strike 1.6? (4)
intervenção politica pode interver no Fedora Linux [RESOLVIDO] (14)
Como colocar atalho para uma pasta na área de trabalho do Ubuntu 24.04... (0)