多个源节点向多个目标节点发数据

    xiaoxiao2021-12-14  18

    实现一下有多个源节点向多个目标节点发数据,(每个源节点判断离它最近的Sink节点,然后向它发数据)

    总体思想:是通过数组给源节点和目标节点建立一个映射表,即对应的源节点指向对应的Sink节点。在数据包传输的过程中通过读取包中的源节点的ID,我这里是用源节点的ID得到目标节点的ID,当然也可以直接读取包中的目标节点的ID。进行包的传输。

     

    在这里定义了2、3、761、252这四个节点为源节点。9、288、606、1、771为Sink节点。具体效果如下。当然你还可以增加节点。

     

    具体的改动代码:wsn_global.h中

    //目标节点数量

    intGlobalSinkNum[1];

    intGlobalSrcNum[1];

    //目标节点地址和坐标

    intGlobalSinkID[801];

    intFinalGlobalSinkIDForSrcId[801];

    intGlobalSinkIDForCalculateDistance[801];

    int FinalNumID[801];

    doubleGlobalSinkX[801];

    doubleGlobalSinkY[801];

    //源节点地址和坐标

    intGlobalSrcID[801];

    doubleGlobalSrcX[801];

    doubleGlobalSrcY[801];

     

    计算的核心代码:NotifyAppSendData中

    这里是求出发包的源节点,距离它最近的目标节点的ID

    TemSrcToSinkDistance=1410;

    for(i=1 ;i<= GlobalSinkNum[0];i++)

          {

          q = sqrt((GlobalSrcX[MyID] -GlobalSinkX[GlobalSinkIDForCalculateDistance[i]])*(GlobalSrcX[MyID] -GlobalSinkX[GlobalSinkIDForCalculateDistance[i]]) +

          (GlobalSrcY[MyID] -GlobalSinkY[GlobalSinkIDForCalculateDistance[i]])*(GlobalSrcY[MyID] -GlobalSinkY[GlobalSinkIDForCalculateDistance[i]]));

    if(q<TemSrcToSinkDistance)

          {

    TemSrcToSinkDistance=q;

    FinalGlobalSinkIDForSrcId[MyID]=GlobalSinkIDForCalculateDistance[i];

    //FinalNumID[0]=i;

    }

          }

    NodeToSinkDistance= SrcToSinkDistance;

    GPSR中从包中读取了源节点的ID,我在这里通过映射表求出了Sink节点的ID。当然直接从包中读取Sink节点的ID会显得更加简洁。

     

    其它的改动与单节点多源节点的改动大同小异。在这里就不贴代码了。

    转载请注明原文地址: https://ju.6miu.com/read-964980.html

    最新回复(0)