Cliente/Servidor Usando Python

Publicado por Vanderson Lucio Rodrigues 12/12/2005

[ Hits: 18.605 ]

Homepage: http://www.vandersongold.com.br

Download 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.

Ps.: Vou está disponibilzando um servidor pra tratar as requisições desse cliente usando C.

  



Esconder código-fonte

#!/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)

Scripts recomendados

Google scan com interface gráfica

Wgetter

Preço do Dólar, Bitcoin e Euro em Python

Previsão do Tempo

X-Chat 2 MultiMsg


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts