python-组播

 1  #!/usr/bin/python 
 2 #coding=utf-8
 3 #发送端
 4 import sys,struct,socket
 5 from time import sleep
 6 
 7 message="hello"
 8 message1="nihao"
 9 
10 multicast_group=('224.3.29.73',10003)
11 multicast_group1=('224.3.29.74',10004)
12 
13 sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
14 
15 sock.timeout(3)
16 
17 ttl=struct.pack('b',1)  #将数字1转换成无符号字符类型.在python中没有这种类型,但是内核需要,所以转换
18 
19 sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL,ttl)
20 
21 try:
22     while 1:
23         sleep(2)
24         sent=sock.sendto(message,multicast_group)
25         sent=sock.sendto(message1,multicast_group1)
26 
27         print >>sys.stderr,"waiting to receive"
28 
29         try:
30             data,server=sock.recvfrom(1024)
31         except sock.timeout:
32             print >>sys.stderr,"time out ,no more response"
33             break
34         else:
35             print >>sys.stderr,"received %s from %s"%(data,server)
36 finally:
37     print >>sys.stderr,"closing socket"
38     sock.close()

 

 1 #!/usr/bin/python
 2 #接收端
 3 import socket
 4 import sys
 5 import struct
 6  
 7 multicast_group = '224.3.29.72'
 8 server_address = ('',10001)
 9  
10 sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
11  
12 sock.bind(server_address)
13  
14 group = socket.inet_aton(multicast_group)
15 mreq = struct.pack('4sL',group,socket.INADDR_ANY)
16 sock.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,mreq)
17  
18 while True:
19     print >>sys.stderr,'\nwaiting to receive message'
20     data,address = sock.recvfrom(1024)
21  
22     print >>sys.stderr,'received %s bytes from %s'%(len(data),data)
23     print >>sys.stderr,'sending acknowledgement to',address
24     sock.sendto('gaozhiqiangf',address)
25  

 

posted @ 2017-07-17 16:28  橙云生  阅读(1599)  评论(1编辑  收藏  举报