2015-11-03 47 views
3

我想写一个简单的消息发送器,将广播消息发送到本地网络中的所有计算机。该代码可以在Windows 7,Ubuntu的14.10,但是当我试图使用它在Windows 10,它甚至不发送UDP包广播,其无为(选中使用Wireshark,没有传出包)广播消息通过IP python窗口10

import socket 
import sys 
import traceback 

dest=('<broadcast>',10100) 
UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 

UDPSock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 
while True: 
    data = raw_input("Enter message to send or type 'exit': ") 
    UDPSock.sendto(data, dest) 
    if data == "exit": 
     break 
UDPSock.close() 
+0

考虑接受有用的答案。 要接受答案,请点击最佳答案旁边的空白复选标记,这样做会增加您的声望并提供更多功能,请参阅[声誉常见问题](http://stackoverflow.com/faq#reputation)请参阅[本页](http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work)了解更多详情。 – zaph

回答

1

更新到Win10后,我发现了同样的问题。 我的WOL.py(Wakeup On Lan)不再适用。 使用tcpdump进行检查。

我发现了一个解决方法。

# Broadcast it to the LAN. 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 
sock.sendto(send_data, ('172.16.1.255', 9) 

'<broadcast>'地址更改为与广播位的设置网络地址的工作我的系统上。

E.g.我有一个IP 172.16.1.x网络掩码255.255.255.0的C类网络。将'<broadcast>'更改为'172.16.1.255'可以做到这一点。通常这是由操作系统完成的。

PS:对不起,上次发错了。

+1

这不是一个答案。你应该留下评论。如果你不能发表评论,请等到你可以 –

+0

这不会试图回答这个问题。 –

+0

感谢您的解决。我在使用192.168.1.X的C类网络上。我使用192.168.1.255,并可以看到广播数据包正常工作。 –