Initial revision

This commit is contained in:
Guido van Rossum 1992-09-08 21:19:55 +00:00
parent 00c5ad6eeb
commit 4fab6a5b0b
1 changed files with 54 additions and 0 deletions

54
Demo/sockets/mcast.py Executable file
View File

@ -0,0 +1,54 @@
# Send/receive UDP multicast packets (SGI)
# After /usr/people/4Dgifts/examples/network/mcast.c
# Usage:
# mcast -s (sender)
# mcast (receivers)
MYPORT = 8123
MYGROUP_BYTES = 225, 0, 0, 250
import sys
import time
import struct
from socket import *
from SOCKET import *
from IN import *
sender = (sys.argv[1:2] == ['-s'])
s = socket(AF_INET, SOCK_DGRAM)
if sender:
# Ugly: construct decimal IP address string from MYGROUP_BYTES
mygroup = ''
for byte in MYGROUP_BYTES: mygroup = mygroup + '.' + `byte`
mygroup = mygroup[1:]
ttl = struct.pack('b', 1) # Time-to-live
s.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, ttl)
while 1:
data = `time.time()` + '\n'
s.sendto(data, (mygroup, MYPORT))
time.sleep(5)
else:
# Bind the socket to my port
s.bind('', MYPORT)
# Allow multiple copies of this program on one machine
s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1) # (Not strictly needed)
# Ugly: construct binary group address from MYGROUP_BYTES
grpaddr = 0
for byte in MYGROUP_BYTES: grpaddr = (grpaddr << 8) | byte
# Construct struct mreq from grpaddr and ifaddr
ifaddr = INADDR_ANY
mreq = struct.pack('ll', grpaddr, ifaddr)
# Add group membership
s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq)
# Loop, printing any data we receive
while 1:
data, sender = s.recvfrom(1500)
while data[-1:] == '\0': data = data[:-1] # Strip trailing \0's
print sender, ':', `data`