2017-11-18 15 views
1

を送るいずれかのSO_BROADCASTを設定ソケット、私はソケットを使用してデータを送信するための送信者クラスがあります。パイソン -

import socket as s 

class Sender: 
    def __init__(self): 
     self.socket = s.socket(s.AF_INET, s.SOCK_DGRAM) 
     self.socket.setsockopt(s.SOL_SOCKET, s.SO_REUSEADDR, 1) 

    def send(self, msg, addr): 
     self.socket.sendto(msg, addr) 

をそして、私はデータを送信するためにSenderのインスタンスを作成することができます。

sender = Sender() 
sender.send("Message example", (ip, port)) 

問題送信者が255.255.255.255にブロードキャストを送信したい場合があるということです。私は放送の通常

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

私の送信者がブロードキャストを送信したり、IPSにメッセージを送信することがありますので、これはここで働いていない理由があります。

SO_BROADCASTブロードキャストを送信するときに、別の送信者クラスとインスタンスを作成せずに設定する方法:SenderBroadcastSender

ありがとうございます!

+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)