49 lines
2.2 KiB
Python
49 lines
2.2 KiB
Python
import socket
|
|
|
|
def run_tcp_server():
|
|
# Создаем TCP сокет
|
|
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
# Разрешаем повторное использование адреса
|
|
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
# Привязываем сокет к адресу и порту
|
|
server.bind(("0.0.0.0", 10000))
|
|
# Начинаем прослушивание (максимум 1 подключение в очереди)
|
|
server.listen(1)
|
|
print("🚀 TCP сервер запущен на порту 10000")
|
|
print("Ожидание подключений...")
|
|
|
|
try:
|
|
while True:
|
|
# Принимаем подключение
|
|
conn, addr = server.accept()
|
|
print(f"✅ Подключение установлено от {addr}")
|
|
|
|
with conn:
|
|
while True:
|
|
# Получаем данные от клиента
|
|
data = conn.recv(1024)
|
|
if not data:
|
|
break
|
|
|
|
message = data.decode().strip()
|
|
print(f"📨 Получено сообщение: '{message}'")
|
|
|
|
# Проверяем команду завершения
|
|
if message.upper() == 'EXIT':
|
|
conn.sendall("🛑 Сервер завершает работу...".encode("utf-8"))
|
|
print("🛑 Получена команда EXIT, завершение работы сервера")
|
|
return
|
|
|
|
# Модифицируем сообщение и отправляем обратно
|
|
modified_message = f"🔄 ECHO: {message.upper()}"
|
|
conn.sendall(modified_message.encode())
|
|
print(f"📤 Отправлен ответ: '{modified_message}'")
|
|
|
|
except KeyboardInterrupt:
|
|
print("\n🛑 Сервер остановлен пользователем")
|
|
finally:
|
|
server.close()
|
|
print("🔒 Сокет сервера закрыт")
|
|
|
|
if __name__ == "__main__":
|
|
run_tcp_server() |