lang/python/ AsyncUdpReceive


Sender

#!/usr/bin/env python3

import sys, socket

def main():
  args = sys.argv[1:]
  for arg in args:
    send(arg)
def send_message(host,port,message):
  with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as s:
    s.connect((host,port))
    s.send(message)
def send(x):
  print(f"Sending {x}")
  send_message('localhost',3000,x.encode())


if __name__ == "__main__":
  main()

Receiver

#!/usr/bin/env python3
import threading
import queue
import time

q = queue.Queue()

def worker():
    while True:
        if q.empty():
          print("Empty -- sleeping")
          time.sleep(1)
          print("Done sleeping")
        else:
          while not q.empty():
            item = q.get()
            print(f'Received {len(item)} bytes in worker thread')
            t = item.decode()
            print(f"Message: {t}")
            q.task_done()

# Turn-on the worker thread.
threading.Thread(target=worker, daemon=True).start()

import socket
with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as s:
  s.bind(("",3000))
  while True:
    m = s.recv(4096)
    print(f"Received {len(m)} bytes in main thread")
    q.put(m)

# Block until all tasks are done.
q.join()
print('All work completed')