我有一堆IP,并向它们发送UDP消息。
for ip in transmit_ip:
socket = socket.socket(socket.INET, socket.SOCK_DGRAM)
if ip.endswith(".255"):
socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
socket.sendto(message, (ip, transmit_port))
socket.close()
我想创建一个套接字并通过该套接字发送到所有IP。 (由于UDP)。像这样:
socket = socket.socket(socket.INET, socket.SOCK_DGRAM)
for ip in transmit_ip:
if ip.endswith(".255"):
socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
socket.sendto(message, (ip, transmit_port))
socket.close()
但事实是,一旦广播地址到来,socket.SO_BROADCAST
选项将被设置到套接字。
首先,我们为每个IP关闭并重新创建套接字,这样就不会影响其他IP。
是否可以取消设置套接字选项?
答案 0 :(得分:2)
是的,就像这样:
socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 0)
(尽管我不确定您是否真的需要这样做才能恢复发送到非广播地址,我认为 SO_BROADCAST
不会妨碍您。 )