Cliente/Servidor Usando Python

Publicado por Vanderson Lucio Rodrigues 12/12/2005

[ Hits: 18.624 ]

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

Upload gráfico via ftp em GTK

Slackware ChangeLog

Simples Cliente FTP em Python

4Shared Time Bypass

CompareChannels


  

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