5. Servidor 2 codigo

Este servidor reenvia los datos recibidos, como en la aplicacion cliente no estamos contemplando la recepcion de los datos quedarian paquetes pendientes de recibir, por lo que el servidor cliente estaria ocupado. al utilizar la funcion close() (opcion 5) estamos forzando al cierre del canal. Al estar ocupado el cliente , este envia un paquete RST para finalizar el intercambio de paquetes.

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind the socket to the port
server_address = ('localhost', 10000)
print('starting up on {} port {}'.format(*server_address))
sock.bind(server_address)

# Listen for incoming connections
sock.listen(1)

while True:
    # Wait for a connection
    print('waiting for a connection')
    connection, client_address = sock.accept()
    try:
        print('connection from', client_address)

        # Receive the data in small chunks and retransmit it
        while True:
            data = connection.recv(300) #para el caso de enviar cifrado, al enviar el dato ocupa muchos mas bytes, tener en cuenta
            print('received {!r}'.format(data))
            if data:
                print('reenvia datos')
                connection.sendall(data)
            else:
                print('no data from', client_address)
                break

    finally:
        # Clean up the connection
        connection.close()