5. Servidor 2 codigo

Este servidor reenvía los datos recibidos, como en la aplicación cliente no estamos contemplando la recepción de los datos quedarían paquetes pendientes de recibir, por lo que el servidor cliente estaría ocupado. Al utilizar la funcion close() (opción 5) estamos forzando al cierre del canal. Al estar ocupado el cliente, éste envía 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()