Python - 套接字为一次发送设置SO_BROADCAST

时间:2017-11-18 14:08:31

标签: python sockets udp broadcasting

我有一个发件人类,用于使用套接字发送数据:

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_BROADCASTSenderBroadcastSender

提前致谢!

1 个答案:

答案 0 :(得分:0)

要允许套接字向255.255.255.255(广播)发送消息,您可以执行以下操作...

内部Sender类:

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)