Cliente/Servidor Usando Python
Publicado por Vanderson Lucio Rodrigues 12/12/2005
[ Hits: 18.458 ]
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)
Enviando mensagens para celulares TIM
Bot que baixa o KDE 3.4 e a QT para o Slackware 10.1
Nenhum comentário foi encontrado.
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
E a guerra contra bots continua
Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário
Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Não consigo acessar os modos de desempenho (2)
Ubuntu — tentando iniciar o windows? (0)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba