3
我有一些示例python代碼,我從另一個堆棧溢出的答案(不記得在哪裏),實現多播。以下代碼應該設置一個用於接收多播數據包的套接字對象。 我封裝它在一個類中,像這樣:python奇怪的多播套接字異常
class Multisock:
def __init__(self, MCAST_GRP, MCAST_PORT, packsize):
import socket
import struct
self.MCAST_GRP = MCAST_GRP
self.MCAST_PORT = MCAST_PORT
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
然而,這給了我這個錯誤:
Traceback (most recent call last):
File "./Audiorecv.py", line 41, in <module>
sock = MulticastNetworking.Multisock('244.1.1.1', 5007, chunk)
File "/home/wheybags/Multicast-Voice-Chat/MulticastNetworking.py", line 30, in __init__
self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 22] Invalid argument
這實在是令人困惑,因爲如果我只是設置MCAST_GRP靜態爲字符串代表一個IP,它的工作原理,但它會給出上面的錯誤,如果我嘗試使用構造函數參數。
如果你使用這個,會發生什麼? 'mreq = struct.pack(「= 4sl」,socket.inet_aton(MCAST_GRP),socket.INADDR_ANY)' – 2011-12-25 19:02:42
仍然給出相同的錯誤 – wheybags 2011-12-30 16:23:01
確保你提供了一個有效的[多播地址](http://en.wikipedia。 org/wiki/Multicast_address#IPv4),否則你會得到這個錯誤。 244.1.1.1無效,可能的錯字。 – ext 2012-01-14 03:49:53