Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/python
- from __future__ import print_function
- import socket
- import struct
- import time
- def Log(*args, **kw):
- print(time.strftime("%H:%M:%S"), *args, **kw)
- class Monitor(object):
- def __init__(self, name="Client", args=(), kwargs={}):
- self.args = args
- self.kwargs = kwargs
- def start(self):
- self._run(*(self.args), **(self.kwargs))
- def _run(self, *args, **kw):
- group = kw["mgroup"]
- port = kw["mport"]
- Log("mcast group", group, "port", port)
- sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
- sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- sock.bind((group, port))
- sock.settimeout(5)
- mreq = struct.pack("4sl", socket.inet_aton(group), socket.INADDR_ANY)
- sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
- count = 0
- while True:
- try:
- packet = sock.recv(8192)
- count += 1
- except socket.timeout:
- Log("mcast timeout")
- finally:
- if count > 0 and count % 10 == 0:
- Log("mcast received", count, "packets")
- def main(kw):
- client = Monitor(kwargs=kw)
- client.start()
- if __name__ == "__main__":
- kw = { "mgroup" : "239.1.2.49", "mport" : 20000,
- }
- main(kw)
- #! /usr/bin/python
- from __future__ import print_function
- import socket
- import time
- def_mgroup = "239.1.2.49"
- def_mport = 20000
- def_rate = 2
- def usage():
- import sys
- print("Usage:", sys.argv[0],
- "[multicast group address [multicast port [rate]]]")
- print()
- print(" multicast group address - default", def_mgroup)
- print(" multicast port - default", def_mport)
- print(" rate - default", def_rate)
- def main(**kw):
- mgroup = kw.get("mgroup", def_mgroup)
- mport = kw.get("mport", def_mport)
- rate = kw.get("rate", def_rate)
- sleepdur = 1.0 / rate # divide by zero if you ask for it
- sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
- sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 10)
- npackets = 0
- while True:
- sock.sendto("robot", (mgroup, mport))
- npackets += 1
- if npackets % 10 == 0: print(time.strftime("%H:%M:%S"), "sent", npackets)
- time.sleep(sleepdur)
- if __name__ == "__main__":
- args = {}
- import sys
- try:
- if len(sys.argv) > 1:
- args["mgroup"] = sys.argv[1]
- if len(sys.argv) > 2:
- args["mport"] = int(sys.argv[2])
- if len(sys.argv) > 3:
- args["rate"] = int(sys.argv[3])
- main(**args)
- except Exception as e:
- print(e)
- usage()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement