Untitled
unknown
plain_text
4 years ago
4.0 kB
8
Indexable
//////////////////////////////////////////////server.py//////////////////////////////////////
#!/usr/bin/env python
# encoding: utf-8
# Revisión 2019 (a Python 3 y base64): Pablo Ventura
# Revisión 2014 Carlos Bederián
# Revisión 2011 Nicolás Wolovick
# Copyright 2008-2010 Natalia Bidart y Daniel Moisset
# $Id: server.py 656 2013-03-18 23:49:11Z bc $
import optparse
import socket
import connection
from constants import *
class Server(object):
"""
El servidor, que crea y atiende el socket en la dirección y puerto
especificados donde se reciben nuevas conexiones de clientes.
"""
def __init__(self, addr=DEFAULT_ADDR, port=DEFAULT_PORT,
directory=DEFAULT_DIR):
print("Serving %s on %s:%s." % (directory, addr, port))
# FALTA: Crear socket del servidor, configurarlo, asignarlo
# a una dirección y puerto, etc.
self.dir = directory
self.s = socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.bind((addr, port))
self.s.listen(1)
def serve(self):
"""
Loop principal del servidor. Se acepta una conexión a la vez
y se espera a que concluya antes de seguir.
"""
while True:
c, a = self.s.accept()
conn = connection.Connection(c, DEFAULT_DIR)
print("Connection from %s\n" % a[0])
data = self.s.recv(1024)
conn.handle(data)
c.close()
# FALTA: Aceptar una conexión al server, crear una
# Connection para la conexión y atenderla hasta que termine.
def main():
"""Parsea los argumentos y lanza el server"""
parser = optparse.OptionParser()
parser.add_option(
"-p", "--port",
help="Número de puerto TCP donde escuchar", default=DEFAULT_PORT)
parser.add_option(
"-a", "--address",
help="Dirección donde escuchar", default=DEFAULT_ADDR)
parser.add_option(
"-d", "--datadir",
help="Directorio compartido", default=DEFAULT_DIR)
options, args = parser.parse_args()
if len(args) > 0:
parser.print_help()
sys.exit(1)
try:
port = int(options.port)
except ValueError:
sys.stderr.write(
"Numero de puerto invalido: %s\n" % repr(options.port))
parser.print_help()
sys.exit(1)
server = Server(options.address, port, options.datadir)
server.serve()
if __name__ == '__main__':
main()
//////////////////////////////////////////////////////// connection.py///////////////////////////////////////////////////
# encoding: utf-8
# Revisión 2019 (a Python 3 y base64): Pablo Ventura
# Copyright 2014 Carlos Bederián
# $Id: connection.py 455 2011-05-01 00:32:09Z carlos $
import os
import socket
import datatime
from constants import *
from base64 import b64encode
class Connection(object):
"""
Conexión punto a punto entre el servidor y un cliente.
Se encarga de satisfacer los pedidos del cliente hasta
que termina la conexión.
"""
def __init__(self, socket, directory):
# FALTA: Inicializar atributos de Connection
self.s = socket
self.dir = directory
dir = os.path("directory")
if not os.path.exists(dir):
os.mkdir(dir)
def handle(self, data):
# FALTA: Manejar la conexión entrante
# FALTA: Leer y procesar los pedidos del cliente
# FALTA: Enviar respuestas al cliente
# FALTA: Cerrar la conexión
x = datatime.now()
# Procesa el pedido del cliente
request_str = request.decode("uft-8")
# Obtiene el contenido del archivo del pedido
try:
file = open("directory/" + srt(x) + "txt", "w")
file.write(request_str)
file.close()
except:
print("Error al crear el archivo")
Editor is loading...