Перейти к содержанию

Задание №1

Задание

Реализовать клиентскую и серверную часть приложения. Клиент отсылает серверу сообщение «Hello, server». Сообщение должно отразиться на стороне сервера. Сервер в ответ отсылает клиенту сообщение «Hello, client». Сообщение должно отобразиться у клиента.

Обязательно использовать библиотеку socket
Реализовать с помощью протокола UDP

server.py
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(("127.0.0.1", 8080))
server_socket.settimeout(0.5)

try:
    while True:
        try:
            data, address = server_socket.recvfrom(1024)
            print(f"Message: {data.decode()}")
            server_socket.sendto("Hello, client".encode(), address)
        except socket.timeout:
            pass

except KeyboardInterrupt:
    server_socket.close()
  • Создаём объект сокета с помощью socket.socket(socket.AF_INET, socket.SOCK_DGRAM), где socket.AF_INET отвечает за IPv4, а socket.SOCK_DGRAM за протокол UDP.
  • Задаём .timeout, чтобы дать возможность программе поймать Ctrl+C.
  • С помощью .recvfrom получаем данные и адрес клиента, а с помощью .sendto возвращаем ответ.
  • Оборачиваем полученный код в try-except socket.timeout, чтобы таймаут не завершил работу сервера.
  • Оборачиваем этот try-except в цикл while True, чтобы сервер не прекратил работу после обработки первого запроса.
  • Оборачиваем цикл в try-except KeyboardInterrupt, чтобы можно было завершить работу сервера по нажатию на Ctrl+C.

Консоль сервера
Консоль сервера

client.py
import socket


client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

client_socket.sendto("Hello, server".encode(), ("127.0.0.1", 8080))
data, address = client_socket.recvfrom(1024)
print(f"Message: {data.decode()}")
  • Создаём объект сокета с помощью socket.socket(socket.AF_INET, socket.SOCK_DGRAM), где socket.AF_INET отвечает за IPv4, а socket.SOCK_DGRAM за протокол UDP.
  • С помощью .sendto отправляем запрос серверу, а с помощью .recvfrom получаем ответ.

Консоль клиента
Консоль клиента