import socket import argparse import threading import random import time def handle_client(conn): while True: try: num = random.randint(0, 100) conn.send(f"number={num}".encode()) time.sleep(1) except: print("Disconnected.") conn.close() break if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('type', type=str, help="'client' or 'server'", default='server') parser.add_argument('--host', type=str, help="server's IPv4 address", default='0.0.0.0') parser.add_argument('--port', type=int, help="server's listening port", default=8888) args = parser.parse_args() socket_type = args.type host, port = args.host, args.port if socket_type == 'server': sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind((host, port)) print("Server listening...") while True: data, addr = sock.recvfrom(1024) print(f"Accept connection from {addr}") sock.sendto(host.encode(), addr) # thread = threading.Thread(target=handle_client, args=(conn, )) # thread.start() else: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) sock.settimeout(2) sock.sendto('discover'.encode(), ('255.255.255.255', port)) while True: data, addr = sock.recvfrom(1024) print(data.decode(), addr)