0 Получение данных через UDP

UDP - это протокол без установления соединения. Это означает, что одноранговые отправляющие сообщения не требуют установления соединения перед отправкой сообщений. socket.recvfrom , таким образом , возвращает кортеж ( msg [сообщение сокет получил], addr [адрес отправителя])

UDP - сервер , использующий исключительно socket модуль:

 from socket import socket, AF_INET, SOCK_DGRAM
sock = socket(AF_INET, SOCK_DGRAM)
sock.bind(('localhost', 6667))

while True:
    msg, addr = sock.recvfrom(8192)  # This is the amount of bytes to read at maximum
    print("Got message from %s: %s" % (addr, msg))


 

Ниже приводится альтернативная реализация с использованием socketserver.UDPServer :

 from socketserver import BaseRequestHandler, UDPServer

class MyHandler(BaseRequestHandler):
    def handle(self):
        print("Got connection from: %s" % self.client_address)
        msg, sock = self.request
        print("It said: %s" % msg)
        sock.sendto("Got your message!".encode(), self.client_address) # Send reply

serv = UDPServer(('localhost', 6667), MyHandler)
serv.serve_forever()


 

По умолчанию sockets блока. Это означает, что выполнение скрипта будет ожидать, пока сокет не получит данные.