from datetime import datetime import logging import queue import socket import struct import sys from pathlib import Path LOG_PATH = Path("C:/temp/wordclock_log.txt") def setup_logging(): FORMAT = "%(asctime)s %(message)s" logging.basicConfig(format=FORMAT, level=logging.INFO) logger = logging.getLogger() handler = logging.FileHandler(LOG_PATH) handler.setLevel(logging.INFO) logger.addHandler(handler) return logger def get_ip_address(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("1.1.1.1", 80)) return s.getsockname()[0] logger = setup_logging() multicast_group = "230.120.10.2" server_address = ("", 8123) # Create the socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Bind to the server address sock.bind(server_address) logging.info("Start") # Tell the operating system to add the socket to the multicast group # on all interfaces. group = socket.inet_aton(multicast_group) mreq = struct.pack("4s4s", group, socket.inet_aton(get_ip_address())) sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) logger.info("Ready") # Receive/respond loop while True: data, address = sock.recvfrom(1024) data_str = data.decode("utf-8").strip() logger.info(data_str)