2011-12-25 9 views
3

나는 멀티 캐스팅을 구현하는 다른 스택 오버플로 응답 (어디에서 기억할 수없는)에서 얻은 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를 나타내는, 그것은 작동하지만 생성자 인수를 사용하려고하면 위의 오류를 제공합니다.

+0

사용하면 어떻게됩니까? 'mreq = struct.pack ("= 4sl", socket.inet_aton (MCAST_GRP), socket.INADDR_ANY) ' –

+0

여전히 동일한 오류가 발생합니다 – wheybags

+1

유효한 [멀티 캐스트 주소] (http : //en.wikipedia. org/wiki/Multicast_address # IPv4) 그렇지 않으면 그 오류가 발생합니다. 244.1.1.1은 유효하지 않으며 오타가있을 수 있습니다. – ext

답변

1

사용중인 멀티 캐스트 주소 (244.1.1.1)가 유효하지 않습니다. 멀티 캐스트 주소의 범위는 224.0.0.0에서 239.255.255.255 사이입니다. 유효한 주소 인 224.1.1.1을 사용하여 코드를 실행했는데 정상적으로 작동했습니다.

관련 문제