#!/usr/bin/env python3
from socket import *

# Criamos um socket para se comunicar
# AF_INET => IPv4
# SOCK_STREAM => TCP
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)

# Configura o socket do servidor para esperar conexões na própria máquina
# (localhost, ou 127.0.0.1), na porta 7777
serverSocket.bind(('localhost', 7777))
serverSocket.listen(1)

# Servidor fica eternamente esperando por um cliente
while True:
    print("server: waiting for connections...")

    # a função accept diz para o socket esperar por uma nova conexão: isso
    # bloqueia a execução do programa!
    conexao, endereco = serverSocket.accept()

    # servidor recebe dados do cliente
    dados = conexao.recv(32)

    # converte os bytes (0 e 1) em uma string e mostra na tela
    print("server: got the message ---> ", dados.decode())

    # servidor faz um eco: envia a mesma mensagem que recebeu de volta para
    # o cliente
    conexao.send(dados)

    # servidor interrompe/fecha a conexão com o cliente
    conexao.close()
