gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:08:51 25 4
gpt4 key购买 nike

我有一个使用套接字发送数据的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.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

提前致谢!

最佳答案

新答案

正如@user207421所说:

Why? Setting it doesn't prevent you from unicasting. Just set it on the socket when you open it. Then you can both unicast and broadcast.



旧答案

要允许套接字将消息发送到 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)

关于python - Python-套接字将SO_BROADCAST设置为一次发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47366999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com