好久没用用python了,几乎都快忘光了……最近正在学组播,看了一些资料,发现python写组播的小case很方便啊,开始的时候google查的英文资料,结果不知道是比较旧还是什么问题,总是实现不了。今天百度了一下国内资料,尝试了一下,居然成功了。不过原来尝试是在RHEL6上,这次是在fedora14上,不知道有没有这个问题。总之这次代码确实能通过了。
Server :
$ cat multiserv.py
#!/usr/bin/env python
from socket import *
import struct
s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', 9998))
mreq = struct.pack("=4sl", inet_aton("224.1.1.1"), INADDR_ANY)
s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq)
count = 0
while count < 100:
f = s.recv(4096)
print "recv message :", f
count += 1
s.close()
Client :
$ cat multicli.py
#!/usr/bin/env python
from socket import *
import struct
s = socket(AF_INET, SOCK_DGRAM)
s.sendto("Hello World!", ("224.1.1.1", 9998))
For IPv6
$ cat multiserv.py
#!/usr/bin/env python
from socket import *
import struct
s = socket(AF_INET6, SOCK_DGRAM)
s.bind(('', 9998))
s.setsockopt(IPPROTO_IPV6, IPV6_JOIN_GROUP,
inet_pton(AF_INET6,"ff02::1234")+'\0'*4)
count = 0
while count < 100:
data = s.recv(4096)
print "recv message : ", data
count += 1
s.close()
$ cat multicli.py
#!/usr/bin/env python
from socket import *
import struct
s = socket(AF_INET6, SOCK_DGRAM)
s.sendto("Hello World!", ("ff02::1234", 9998))
参考资料:http://blog.wodeshufang.com/p/python-multicast-receive.html
http://svn.python.org/projects/python/trunk/Demo/sockets/mcast.py