mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Initial revision
This commit is contained in:
		
							parent
							
								
									00c5ad6eeb
								
							
						
					
					
						commit
						4fab6a5b0b
					
				
					 1 changed files with 54 additions and 0 deletions
				
			
		
							
								
								
									
										54
									
								
								Demo/sockets/mcast.py
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										54
									
								
								Demo/sockets/mcast.py
									
										
									
									
									
										Executable 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` | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guido van Rossum
						Guido van Rossum