2017-11-18 8 views
1

를 보내는 SO_BROADCAST를 설정 보낸 사람이 255.255.255.255에게 브로드 캐스트를 보내려는 경우 일 수 있습니다. 파이썬 소켓 I 소켓을 사용하여 데이터를 전송하는 발신자 클래스가 하나가

는 일반적으로 방송을 위해 내가 할 내 보낸 방송을 보내거나 IPS에게 메시지를 보낼 수 있기 때문에이 여기에 작동하지 않습니다

self.socket.setsockopt(s.SOL_SOCKET, s.SO_BROADCAST, 1) 

이유입니다.

SO_BROADCAST 별도의 발신자 클래스 및 인스턴스를 만들지 않고 브로드 캐스트를 보낼 때만 어떻게 설정합니까? Sender, BroadcastSender?

미리 감사드립니다.

+0

's.socket (s.AF_INET를 사용하는 경우, s.SOCK_DGRAM)'방송 메시지를 보낼 수 없습니다! 낮은 수준의 액세스를 원하지만 상위 수준의 클래스를 사용합니다. 'RAW' 소켓만이 이것을 보낼 수 있고, 다른 연결 ('TCP' /'UDP')은 목표 (IP/PORT)를 가지고 있습니다. 내 제안은 복사/붙여 넣기 코드를 사용하지 않습니다. 그렇지 않으면 많은 정보가 누락됩니다. ('RAW'는'root/administrator' 권한이 필요합니다). – dsgdfg

+0

브로드 캐스트 메시지를 말하면 브로드 캐스트 포트로 메시지를 보내는 것입니다. 즉, 다른 사람들이 해당 IP에서 오는 메시지를 수신하는 '255.255.255.255'입니다. 나는 어쨌든 해결책을 찾아 냈다. –

답변

0

Sender 클래스 내부 ... 당신의 소켓이 같은 작업을 수행 할 수 있습니다 255.255.255.255 (방송)에 메시지를 보낼 수 있도록 :

def send(self, msg, addr): 
    if msg == "255.255.255.255": self.socket.setsockopt(s.SOL_SOCKET, s.SO_BROADCAST, 1) 
    self.socket.sendto(msg, addr) 
    if msg == "255.255.255.255": self.socket.setsockopt(s.SOL_SOCKET, s.SO_BROADCAST, 0)