先貼代碼:
#coding:utf-8
import socket,sys
dest = ('255.255.255.255', 6666)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
s.sendto("hello",dest)
print "looking for replies: press Ctrl + c to stop "
while 1:
(buf ,address) = s.recvfrom(1024)
if not len(buf):
break
print "Revived from %s:%s" %(address ,buf)
這個時候,怎么發都發不出去。但是把IP改成我的子網廣播就可以了。
dest = ('192.168.15.255', 6666)
這是為啥啊?有什么辦法讓全為255的也能進行廣播?
有人說是路由器的問題,但是我用手機進行廣播的時候,用255.255.255.255就是成功的。代碼是別人寫的我就貼不出來了。
uj5u.com熱心網友回復:
你得把TTL設成1吧uj5u.com熱心網友回復:
你是啥系統?不同的系統對廣播的處理不完全一樣,理論上你的子網廣播的范圍是等同于全255廣播的,因為所有的廣播都是通過不了路由器或vlan的限制的。uj5u.com熱心網友回復:
我獲取IP竟然獲取的是虛擬機的ip,就是我設定的xx.xx.xx.1,所以我懷疑廣播全都跑了我虛擬機里的那個網路里去了uj5u.com熱心網友回復:
貌似和這個沒關系。uj5u.com熱心網友回復:
向255.255.255.255發送資料包,這種資料包不會被路由,它只能到達本物理網路中的所有主機,此種廣播叫有限廣播。uj5u.com熱心網友回復:
你在虛擬機里,網路的是路由不出去的uj5u.com熱心網友回復:
我沒在虛擬機里。我就是正常機器,不過安裝了虛擬機,我在win里頭發廣播,發現不行,再把虛擬機的網卡禁用了發現就能發出去了。我發現用python的時候,取本機ip地址,竟然把虛擬機的Ip給取出來了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/156032.html
標籤:網絡編程
