Python-Sockets为一次发送设置SO_广播
我有一个sender类,用于使用套接字发送数据:Python-Sockets为一次发送设置SO_广播,python,sockets,udp,broadcasting,Python,Sockets,Udp,Broadcasting,我有一个sender类,用于使用套接字发送数据: 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.so
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)
这在这里不起作用的原因是,我的发件人可能会向IP发送广播或消息
只有在发送广播而不创建单独的发送者类和实例时,我如何设置SO\u BROADCAST
,BroadcastSender
提前谢谢 新答案 如前所述:
为什么??设置它不会阻止您单播。把它打开就行了 当你打开插座时,把它打开。然后您可以同时进行单播和广播
旧答案 要允许套接字向
255.255.255.255
(广播)发送消息,可以执行以下操作
内部Sender
类:
def send(self, msg, addr):
if addr[0] == "255.255.255.255": self.socket.setsockopt(s.SOL_SOCKET, s.SO_BROADCAST, 1)
self.socket.sendto(msg, addr)
if addr[0] == "255.255.255.255": self.socket.setsockopt(s.SOL_SOCKET, s.SO_BROADCAST, 0)
新答案 如前所述:
为什么??设置它不会阻止您单播。把它打开就行了 当你打开插座时,把它打开。然后您可以同时进行单播和广播
旧答案 要允许套接字向
255.255.255.255
(广播)发送消息,可以执行以下操作
内部Sender
类:
def send(self, msg, addr):
if addr[0] == "255.255.255.255": self.socket.setsockopt(s.SOL_SOCKET, s.SO_BROADCAST, 1)
self.socket.sendto(msg, addr)
if addr[0] == "255.255.255.255": self.socket.setsockopt(s.SOL_SOCKET, s.SO_BROADCAST, 0)
如果使用
s.socket(s.AF_INET,s.SOCK_DGRAM)
则无法发送广播消息!您需要低级访问,但使用高级类RAW
socket只能发送此消息,其他连接(TCP
/UDP
)已获得目标(IP/端口)。我的报价不使用复制/粘贴代码,否则会错过很多信息。(RAW
requiredroot/administrator
permission)。当我说广播消息时,我的意思是将消息发送到广播端口,即255.255.255
其他人正在侦听来自该ip的消息。我刚刚想出了一个解决办法。为什么?设置它不会阻止您单播。当你打开它时,把它放在插座上。然后您可以同时进行单播和广播。@user207421很好,我不知道如果使用s.socket(s.AF\u INET,s.SOCK\u DGRAM)
您不能发送广播消息!您需要低级访问,但使用高级类RAW
socket只能发送此消息,其他连接(TCP
/UDP
)已获得目标(IP/端口)。我的报价不使用复制/粘贴代码,否则会错过很多信息。(RAW
requiredroot/administrator
permission)。当我说广播消息时,我的意思是将消息发送到广播端口,即255.255.255
其他人正在侦听来自该ip的消息。我刚刚想出了一个解决办法。为什么?设置它不会阻止您单播。当你打开它时,把它放在插座上。然后你可以单播和广播。@user207421不错,我不知道,谢谢