Differences between current version and revision by previous author of SourceSpecificMulticastExample.
Other diffs: Previous Major Revision, Previous Revision, or view the Annotated Edit History
Newer page: | version 6 | Last edited on Tuesday, May 5, 2009 7:50:44 pm | by PaulWankadia | |
Older page: | version 5 | Last edited on Tuesday, November 29, 2005 12:34:05 am | by PerryLorier | Revert |
@@ -83,9 +83,9 @@
return 0;
}
</verbatim>
-Reciever
::
+Receiver
::
Pass the [IP] address of the sender as CommandLine argument: <tt>./ssm-rec ip.address.of.sender</tt>
<verbatim>
@@ -150,8 +150,53 @@
write(1,buffer,ret);
}
return 0;
}
+ </verbatim>
+
+Python::
+
+ <verbatim>
+ #! /usr/bin/python
+
+ import getopt
+ import socket
+ import sys
+
+ if not hasattr(socket, 'IP_MULTICAST_TTL'):
+ setattr(socket, 'IP_MULTICAST_TTL', 33)
+ if not hasattr(socket, 'IP_ADD_SOURCE_MEMBERSHIP'):
+ setattr(socket, 'IP_ADD_SOURCE_MEMBERSHIP', 39)
+
+ if sys.argv[1] == 'send':
+ opts, args = getopt.getopt(sys.argv[2:], 't:s:g:p:')
+ opts = dict(opts)
+
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
+ if '-t' in opts:
+ s.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_TTL, chr(int(opts['-t'])))
+ if '-s' in opts:
+ s.bind((opts['-s'], 0))
+ s.connect((opts['-g'], int(opts['-p'])))
+ print 'READY.'
+ while True:
+ s.send(sys.stdin.readline())
+
+ elif sys.argv[1] == 'recv':
+ opts, args = getopt.getopt(sys.argv[2:], 'g:i:s:p:')
+ opts = dict(opts)
+ opts.setdefault('-i', '0.0.0.0')
+
+ imr = (socket.inet_pton(socket.AF_INET, opts['-g']) +
+ socket.inet_pton(socket.AF_INET, opts['-i']) +
+ socket.inet_pton(socket.AF_INET, opts['-s']))
+
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
+ s.setsockopt(socket.SOL_IP, socket.IP_ADD_SOURCE_MEMBERSHIP, imr)
+ s.bind((opts['-g'], int(opts['-p'])))
+ print 'READY.'
+ while True:
+ print repr(s.recvfrom(4096))
</verbatim>
----
Part of CategoryProgramming and CategoryNetworking