while True:
data = conn.recv(1024).decode('utf-8').lower()
print(data)
У тебя сервер вообще не предусматривает выхода из обслуживания клиента. Разве что по исключению, но тогда весь сервер грохнется.
Не проверяешь, получили ли хоть что-то. Если соединение закрыто, recv() вернёт bytes-объект нулевой длины. Так что проверяй длину, и если она нулевая - прерывай цикл.
Также в твоем коде ни сервер, ни клиент не предусматривают нормального завершения соединения. Если ты используешь TCP, то нужно вызвать метод
s.shutdown(), чтобы дать другой стороне понять, что больше данных не будет, а потом
s.close(), чтобы полностью закрыть соединение.
Для клиента нужно будет определить условие, когда закрывать соединение. Например, если пользовать в ответ на input() ввёл пустую строку.