【发布时间】:2017-11-18 14:08:31
【问题描述】:
我有一个使用套接字发送数据的发送器类:
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 仅在发送广播而不创建单独的发送方类和实例时:Sender、BroadcastSender?
提前致谢!
【问题讨论】:
-
如果使用
s.socket(s.AF_INET, s.SOCK_DGRAM)你不能发送广播消息!您想要低级别访问但使用高级课程。RAWsocket 只能发送这个,其他连接(TCP/UDP)得到目标(IP/PORT)。我的报价不使用复制/粘贴代码,否则会错过很多信息。 (RAW需要root/administrator权限)。 -
当我说广播消息时,我的意思是向广播端口发送消息,即
255.255.255.255,其他人正在侦听来自该 IP 的消息。不管怎样,我刚刚想出了一个解决方案。 -
为什么?设置它不会阻止您进行单播。打开时只需将其放在插座上即可。然后你可以单播和广播。
-
@user207421 很好,我不知道谢谢
标签: python sockets udp broadcasting