Для того, чтобы разобраться с тем, как создать прослушиватель по сокету, я написал для вас маленький пример. Для работы нам необходимо иметь серверную часть и клиентскую часть. Для примера я реализую то и то.
Server.py
- наш сервер.
import socket
def start_server():
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 12345)
server_sock.bind(server_address)
server_sock.listen(1)
print("Сервер запущен, ожидание соединения")
try:
connection, client_address = server_sock.accept()
print("Соединение установлено с: ", client_address)
while True:
data = connection.recv(1024)
if not data:
break
# Преобразуем полученные данные в верхний регистр
response = data.decode().upper()
print(f'здесь данные: {data}')
print(f'А здесь сообщение {response}')
# Отправляем данные обратно клиенту
connection.sendall(response.encode())
except KeyboardInterrupt:
print("Сервер прерван пользователем")
finally:
connection.close()
server_sock.close()
if __name__ == "__main__":
start_server()
main.py
- наш клиент
import socket
def send_data_to_server(sock, message):
try:
# Отправляем сообщение на сервер
sock.sendall(message.encode())
# Получаем и выводим ответ от сервера
response = sock.recv(1024)
print("Получено с сервера: ", response.decode())
except Exception as e:
print("Ошибка:", e)
if __name__ == "__main__":
# Создаем сокет объект
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Устанавливаем параметры подключения (адрес и порт сервера)
server_address = ('localhost', 12345)
try:
# Подключаемся к серверу
sock.connect(server_address)
while True:
# Читаем пользовательский ввод
message = input("Напишите сообщение (или 'exit' для выхода): ")
if message.lower() == "exit":
break
# Отправляем введенное сообщение на сервер и получаем ответ
send_data_to_server(sock, message)
except ConnectionRefusedError:
print("Отказ в подключении. Убедитесь, что сервер запущен.")
except KeyboardInterrupt:
print("Прервано пользователем.")
finally:
sock.close()
Для работы необходимо сначала запустить server.py
, а затем запустить main.py
, далее можно из консоли main.py
отправлять сообщения на сервер и получать обработанный ответ. В данном случае сервер просто форматирует строку в заглавные символы. Напишем в консоли клиента hello
и отправим. Получим следующие выводы в терминалах:
server.py
PS D:\projects\python\24.07.23> py .\server.py
Сервер запущен, ожидание соединения
Соединение установлено с: ('127.0.0.1', 53065)
здесь данные: b'hello'
А здесь сообщение HELLO
main.py
PS D:\projects\python\24.07.23> py .\main.py
Напишите сообщение (или 'exit' для выхода): hello
Получено с сервера: HELLO
Напишите сообщение (или 'exit' для выхода):
P.S. Я могу лишь предполагать, почему был выбран порт 53065
, вероятно потому что он самый свободный для обмена данными.