Совместное использование UDP-сервера и клиента: несколько методов с примерами кода

В этой статье блога мы рассмотрим различные методы совместной работы сервера и клиента UDP (протокол пользовательских дейтаграмм). Мы предоставим примеры кода для каждого метода, что позволит вам понять и эффективно их реализовать. Давайте погрузимся!

Метод 1: одиночный скрипт с многопоточностью
Пример кода:

import socket
import threading
def server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_socket.bind(('localhost', 12345))
    while True:
        data, address = server_socket.recvfrom(1024)
        print(f"Received data: {data.decode()} from {address}")
def client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    client_socket.sendto(b"Hello, Server!", ('localhost', 12345))
server_thread = threading.Thread(target=server)
client_thread = threading.Thread(target=client)
server_thread.start()
client_thread.start()
server_thread.join()
client_thread.join()

Метод 2: отдельные сценарии с многопроцессорной обработкой
Серверный сценарий:

import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(('localhost', 12345))
while True:
    data, address = server_socket.recvfrom(1024)
    print(f"Received data: {data.decode()} from {address}")

Клиентский скрипт:

import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.sendto(b"Hello, Server!", ('localhost', 12345))

Метод 3: использование asyncio
Пример кода:

import asyncio
async def server():
    receiver = asyncio.DatagramTransport()
    await receiver.bind(('localhost', 12345))
    while True:
        data, address = await receiver.recvfrom(1024)
        print(f"Received data: {data.decode()} from {address}")
async def client():
    sender = asyncio.DatagramTransport()
    sender.connect(('localhost', 12345))
    sender.sendto(b"Hello, Server!")
loop = asyncio.get_event_loop()
tasks = asyncio.gather(server(), client())
loop.run_until_complete(tasks)
loop.close()

В этой статье мы обсудили несколько методов совместной работы UDP-сервера и клиента. Мы предоставили примеры кода для каждого метода, демонстрируя, как их эффективно реализовать. Предпочитаете ли вы один сценарий с многопоточностью, отдельные сценарии с многопроцессорной обработкой или использование asyncio, теперь у вас есть различные варианты выбора в зависимости от ваших конкретных требований.