1

我在 python 中使用 UDP 广播将数据包从移动节点发送到固定节点。我想要的是在移动节点接近静态节点时提高数据速率,并在节点移开时降低数据速率,以便我可以将更多数据包传输到接收节点。

实际上,我正在为我的论文做一个实验,我想测量信号强度以及相对于静态节点的距离。因此,根据接收信号强度的值,我想调整广播速率的距离。

任何帮助和建议都会非常有帮助。

这是代码

from socket import *
import os
import time

# A dummy string that I want to send
a = os.urandom(1400)

s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', 0))
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)


# Send data along with the sequence number and current time
i=0  
while 1:  
    if os.system("iwconfig wlan0 | awk '/Signal level/ {print $4}'|cut -c 7-9") >= -90:   #-90 dbm is set as threshold  
        data = (str(i)+"###"+str(time.time())+"@@@"+ a.encode('hex'))[:1400] # only send 1400bytes of data  
        s.sendto(data, ('192.168.169.255', 5000))  
        i+=1  
    else sleep('<broadcast interval>') # sleep until the next broadcast interval  

我很不确定如何调整广播速率,所以我没有它的代码。

先感谢您

4

1 回答 1

0

如果你想以线性方式完成它,你可以使用这样的东西

def calc_delay(signal):
   rate = 11 * ( float(signal) + 90 ) / 20
   return(rate)

rate_cmd = 'iwconfig wlan0 rate %sM" % calc_delay(signal)
os.system(rate_cmd)

这是假设您将获得 -90 和 -70 之间的信号强度,并且您的无线网卡的最大速率为 11M 。所以在你的循环中,你可以为这个函数的返回值休眠。如果信号强度在不同的范围内,90 和 20 显然需要改变。

于 2012-12-05T18:57:20.743 回答