`
showerhan
  • 浏览: 11676 次
社区版块
存档分类
最新评论

一个模拟DV算法的程序

阅读更多

计算机网络——自顶向下方法,第四章编程作业,模拟DV算法。有四个Node,数据就是书上的,可以在一个Eclipse中运行四个Node,就是需要锁定控制台,稍微有点麻烦。

 

import java.net.*;
import java.util.*;


public class Node0{
	int[] m = new int[4];
	int[] i = new int[4];
	int fasong = 1;
	int jieshou = 0;
	int gaibian = 0;
	int n = 0;
	int flag = 0;
	DatagramSocket serverSocket = new DatagramSocket(9000);;
	String send;
	byte[] sendData;
	byte[] receiveData;
	DatagramPacket sendPacket;
	DatagramPacket receivePacket;
	StringTokenizer st;
	public  void init0() throws Exception{
		
		 m[0] = 0;
		 m[1] = 1;
		 m[2] = 3;
		 m[3] = 7;
	     send=m[0]+" "+m[1]+" "+m[2]+" "+m[3]+" ";
		 System.out.println("原本距离向量为:");
		 System.out.println("本节点		到node1		到node2		到node3");
		 System.out.println("0		1		3		7");
		 System.out.println("----		----		----		----");
		 System.out.println();
	     sendData = new byte[100];
	     receiveData = new byte[100];
	     sendData = send.getBytes();
	     InetAddress sendto = InetAddress.getByName("localhost");
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9001);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9002);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9003);
	     serverSocket.send(sendPacket);
	     
	}
	public void update0() throws Exception{
		 send=m[0]+" "+m[1]+" "+m[2]+" "+m[3];
	     sendData = new byte[100];
	     sendData = send.getBytes();
	     InetAddress sendto = InetAddress.getByName("localhost");
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9001);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9002);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9003);
	     serverSocket.send(sendPacket);
	     fasong++;
	}
	public static void main(String args[]) throws Exception
	{
		 new Node0();
	}
	public Node0() throws Exception{
		try
		{
			Thread.currentThread();
			Thread.sleep(20000);//毫秒 
		}
		catch(Exception e){}
		init0();
		while(true){
			flag = 0;
			receivePacket = new DatagramPacket(receiveData,receiveData.length );
	     	serverSocket.receive(receivePacket);
	     	jieshou++;
	     	String sentence=new String(receivePacket.getData());
	     	st = new StringTokenizer(sentence);
	     	n = 0;
	     	while(st.hasMoreTokens() && n<4){
	     		i[n] = Integer.parseInt(st.nextToken());
	     		n++;
	     	}
     		if(i[0] == 1){
     			if(m[1]+i[2]<m[2]){
     				m[2] = m[1] + i[2];
     				flag = 1;
     				System.out.println("来自邻接点1-》2的更新");
     			}
     			if(m[1]+i[3]<m[3]){
     				m[3] = m[1] + i[3];
     				flag = 1;
     				System.out.println("来自邻接点1-》3的更新");
     			}
     		}
     		if(i[0] == 2){
     			if(m[2]+i[2]<m[1]){
     				m[1] = m[2] + i[2];
     				flag = 1;
     				System.out.println("来自邻接点2-》1的更新");
     			}
     			if(m[2]+i[3]<m[3]){
     				m[3] = m[2] + i[3];
     				flag = 1;
     				System.out.println("来自邻接点2-》3的更新");
     			}
     		}
     		if(i[0] == 3){
     			if(m[3]+i[2]<m[1]){
     				m[1] = m[3] + i[2];
     				flag = 1;
     				System.out.println("来自邻接点3-》1的更新");
     			}
     			if(m[3]+i[3]<m[2]){
     				m[2] = m[3] + i[3];
     				flag = 1;
     				System.out.println("来自邻接点3-》2的更新");
     			}
     		}
     		if(flag == 1){
     			update0();
     			System.out.println(m[0]+"		"+m[1]+"		"+m[2]+"		"+m[3]);
     			System.out.println("----		----		----		----");
     			 System.out.println("发送更新给其邻接点");
     			 
     		}
 	 		System.out.println();System.out.println();
     	}
 		
	
	}
	     
}

 

import java.net.*;
import java.util.*;
public class Node1{
	int[] m = new int[4];
	int[] i = new int[4];
	int n;
	int flag;
	DatagramSocket serverSocket;
	String send;
	byte[] sendData;
	byte[] receiveData;
	DatagramPacket sendPacket;
	DatagramPacket receivePacket;
	StringTokenizer st;
	public  void init1() throws Exception{
		 m[0] = 1;
		 m[1] = 1;
		 m[2] = 1;
		 m[3] = 999;
	     send=m[0]+" "+m[1]+" "+m[2]+" "+m[3]+" ";
	     System.out.println("原本距离向量为:");
		 System.out.println("本节点		到node0		到node2		到node3");
		 System.out.println("1		1		1		999");
		 System.out.println("----		----		----		----");
		 System.out.println();
	     sendData = new byte[100];
	     receiveData = new byte[100];
	     sendData = send.getBytes();
	     InetAddress sendto = InetAddress.getByName("localhost");
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9000);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9002);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9003);
	     serverSocket.send(sendPacket);
	}
	public void update1() throws Exception{
		 send=m[0]+" "+m[1]+" "+m[2]+" "+m[3];
	     sendData = new byte[100];
	     sendData = send.getBytes();
	     InetAddress sendto = InetAddress.getByName("localhost");
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9000);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9002);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9003);
	     serverSocket.send(sendPacket);
	}
	public static void main(String args[]) throws Exception
	{
		new Node1();
	}
	public Node1() throws Exception{
		serverSocket = new DatagramSocket(9001);
		try
		{
		Thread.currentThread();
		Thread.sleep(20000);//毫秒 
		}
		catch(Exception e){}
		init1();
		while(true){
			flag = 0;
			receivePacket = new DatagramPacket(receiveData,receiveData.length );
	     	serverSocket.receive(receivePacket);
	     	String sentence=new String(receivePacket.getData());
	     	st = new StringTokenizer(sentence);
	     	n = 0;
	     	while(st.hasMoreTokens() && n<4){
	     		i[n] = Integer.parseInt(st.nextToken());
	     		n++;
	     	}
     		if(i[0] == 0){
     			if(m[1]+i[2]<m[2]){
     				m[2] = m[1] + i[2];
     				flag = 1;
     				System.out.println("来自邻接点0-》2的更新");
     			}
     			if(m[1]+i[3]<m[3]){
     				m[3] = m[1] + i[3];
     				flag = 1;
     				System.out.println("来自邻接点0-》3的更新");
     			}
     		}
     		if(i[0] == 2){
     			if(m[2]+i[1]<m[1]){
     				m[1] = m[2] + i[1];
     				flag = 1;
     				System.out.println("来自邻接点2-》1的更新");
     			}
     			if(m[2]+i[3]<m[3]){
     				m[3] = m[2] + i[3];
     				flag = 1;
     				System.out.println("来自邻接点2-》3的更新");
     			}
     		}
     		if(flag == 1){
     			update1();
     			System.out.println(m[0]+"		"+m[1]+"		"+m[2]+"		"+m[3]);
     			System.out.println("----		----		----		----");
     			System.out.println("发送更新给其邻接点");System.out.println();
     		}
     		
		}
	}
	     
}

 

import java.net.*;
import java.util.*;
public class Node2{
	int[] m = new int[4];
	int[] i = new int[4];
	int n;
	int flag;
	DatagramSocket serverSocket;
	String send;
	byte[] sendData;
	byte[] receiveData;
	DatagramPacket sendPacket;
	DatagramPacket receivePacket;
	StringTokenizer st;
	public  void init2() throws Exception{
		 
		 m[0] = 2;
		 m[1] = 3;
		 m[2] = 1;
		 m[3] = 2;
	     send=m[0]+" "+m[1]+" "+m[2]+" "+m[3]+" ";
	     System.out.println("原本距离向量为:");
		 System.out.println("本节点		到node0		到node1		到node3");
		 System.out.println("2		3		1		2");
		 System.out.println("----		----		----		----");
		 System.out.println();
	     sendData = new byte[100];
	     receiveData = new byte[100];
	     sendData = send.getBytes();
	     InetAddress sendto = InetAddress.getByName("localhost");
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9000);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9001);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9003);
	     serverSocket.send(sendPacket);
	}
	public void update2() throws Exception{
		 send=m[0]+" "+m[1]+" "+m[2]+" "+m[3];
	     sendData = new byte[100];
	     sendData = send.getBytes();
	     InetAddress sendto = InetAddress.getByName("localhost");
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9000);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9001);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9003);
	     serverSocket.send(sendPacket);
	}
	public static void main(String args[]) throws Exception
	{
		
		Node2 node = new Node2();
	}
	public Node2() throws Exception{
		serverSocket = new DatagramSocket(9002);
		try
		{
		Thread.currentThread();
		Thread.sleep(20000);//毫秒 
		}
		catch(Exception e){}
		init2();
		while(true){
			flag = 0;
			receivePacket = new DatagramPacket(receiveData,receiveData.length );
	     	serverSocket.receive(receivePacket);
	     	String sentence=new String(receivePacket.getData());
	     	st = new StringTokenizer(sentence);
	     	n = 0;
	     	while(st.hasMoreTokens() && n<4){
	     		i[n] = Integer.parseInt(st.nextToken());
	     		n++;
	     	}
     		if(i[0] == 0){
     			if(m[1]+i[1]<m[2]){
     				m[2] = m[1] + i[1];
     				flag = 1;
     				System.out.println("来自邻接点0-》1的更新");
     			}
     			if(m[1]+i[3]<m[3]){
     				m[3] = m[1] + i[3];
     				flag = 1;
     				System.out.println("来自邻接点0-》3的更新");
     			}
     		}
     		if(i[0] == 1){
     			if(m[2]+i[1]<m[1]){
     				m[1] = m[2] + i[1];
     				flag = 1;
     				System.out.println("来自邻接点1-》0的更新");
     			}
     			if(m[2]+i[3]<m[3]){
     				m[3] = m[2] + i[3];
     				flag = 1;
     				System.out.println("来自邻接点1-》3的更新");
     			}
     		}
     		if(i[0] == 3){
     			if(m[3]+i[1]<m[1]){
     				m[1] = m[3] + i[1];
     				flag = 1;
     				System.out.println("来自邻接点3-》0的更新");
     			}
     			if(m[3]+i[2]<m[2]){
     				m[2] = m[3] + i[2];
     				flag = 1;
     				System.out.println("来自邻接点3-》2的更新");
     			}
     		}
     		if(flag == 1){
     			update2();
     			System.out.println(m[0]+"		"+m[1]+"		"+m[2]+"		"+m[3]);
     			System.out.println("----		----		----		----");
     			System.out.println("发送更新给其邻接点");System.out.println();
     		}
		}
	}
	     
}

 

package com.hzy;

import java.net.*;
import java.util.*;
public class Node3{
	int[] m = new int[4];
	int[] i = new int[4];
	int n;
	int flag;
	DatagramSocket serverSocket;
	String send;
	byte[] sendData;
	byte[] receiveData;
	DatagramPacket sendPacket;
	DatagramPacket receivePacket;
	StringTokenizer st;
	public  void init3() throws Exception{
		 
		 m[0] = 3;
		 m[1] = 7;
		 m[2] = 999;
		 m[3] = 2;
	     send=m[0]+" "+m[1]+" "+m[2]+" "+m[3]+" ";

		 System.out.println("原本距离向量为:");
		 System.out.println("本节点		到node0		到node1		到node2");
		 System.out.println("3		7		999		2");
		 System.out.println("----		----		----		----");
		 System.out.println();
	     sendData = new byte[100];
	     receiveData = new byte[100];
	     sendData = send.getBytes();
	     InetAddress sendto = InetAddress.getByName("localhost");
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9000);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9002);
	     serverSocket.send(sendPacket);
	}
	public void update3() throws Exception{
		 send=m[0]+" "+m[1]+" "+m[2]+" "+m[3];
	     sendData = new byte[100];
	     sendData = send.getBytes();
	     InetAddress sendto = InetAddress.getByName("localhost");
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9000);
	     serverSocket.send(sendPacket);
	     sendPacket = new DatagramPacket(sendData,sendData.length,sendto,9002);
	     serverSocket.send(sendPacket);
	}
	public static void main(String args[]) throws Exception
	{
		Node3 node = new Node3();
	}
	public Node3() throws Exception{
		serverSocket = new DatagramSocket(9003);
				try
				{
				Thread.currentThread();
				Thread.sleep(20000);//毫秒 
				}
				catch(Exception e){}
				init3();
				while(true){
					flag = 0;
					receivePacket = new DatagramPacket(receiveData,receiveData.length );
			     	serverSocket.receive(receivePacket);
			     	String sentence=new String(receivePacket.getData());
			     	st = new StringTokenizer(sentence);
			     	n = 0;
			     	while(st.hasMoreTokens() && n<4){
			     		i[n] = Integer.parseInt(st.nextToken());
			     		n++;
			     	}
		     		if(i[0] == 0){
		     			if(m[1]+i[1]<m[2]){
		     				m[2] = m[1] + i[1];
		     				flag = 1;
		     				System.out.println("来自邻接点0-》1的更新");
		     			}
		     			if(m[1]+i[2]<m[3]){
		     				m[3] = m[1] + i[2];
		     				flag = 1;
		     				System.out.println("来自邻接点0-》2的更新");
		     			}
		     		}
		     		if(i[0] == 2){
		     			if(m[3]+i[1]<m[1]){
		     				m[1] = m[3] + i[1];
		     				flag = 1;
		     				System.out.println("来自邻接点2-》0的更新");
		     			}
		     			if(m[3]+i[2]<m[2]){
		     				m[2] = m[3] + i[2];
		     				flag = 1;
		     				System.out.println("来自邻接点2-》1的更新");
		     			}
		     		}
		     		if(flag == 1){
		     			update3();
		     			System.out.println(m[0]+"		"+m[1]+"		"+m[2]+"		"+m[3]);
		     			System.out.println("----		----		----		----");
		     			System.out.println("发送更新给其邻接点");System.out.println();
		     		}
     		
		}
	}
	     
}
 

 

分享到:
评论

相关推荐

    C语言模拟路由DV算法

    标题中的"C语言模拟路由DV算法"指的是使用C语言来实现一种路由算法——距离矢量(Distance Vector, DV)算法。这种算法是网络路由协议中的一种基础算法,常用于解决网络节点间如何有效地传递路由信息的问题。 DV...

    DV算法模拟软件

    这款名为“DV算法模拟软件”的程序,就是为了让用户能够直观地理解和学习DV算法的工作原理而设计的。 DV算法基于贝尔曼-福特(Bellman-Ford)公式,它的核心思想是通过不断交换距离向量来更新路由表,以确定最佳...

    dv路由算法 java模拟

    在DV算法中,每个路由器维护一个路由表,包含了到达各个网络目标的距离以及下一跳路由器的信息。这个距离通常指的是跳数,但也可能是其他网络度量,如带宽、延迟等。 **Java编程**是实现DV路由算法的常用工具,因为...

    DV-Hop算法文档和matlab程序

    本压缩包包含了一个关于DV-Hop算法的文档(ժҪ.doc)以及两个MATLAB程序(Untitled4.m和DV_Hop最终.m),用于帮助理解和实践该算法。 首先,我们来看DV-Hop算法的基本原理。在WSN中,通常有一些已知位置的节点称为...

    DV.rar_DV-Distance_DV算法_Dv-distance 代码_dv

    描述中提到的“网络DV算法源代码比较简单,就是模拟路由器分布式选路”,暗示了这个压缩包内可能包含了一个简单的DV算法实现,用于演示或教学目的。分布式选路是DV算法的核心应用,它让网络中的每个路由器都能够独立...

    DV-Hop定位算法

    在MATLAB中,可以编写程序模拟DV-Hop算法的运行过程,包括节点布局、信号传播、hop计数、距离估计和定位计算等步骤。通过仿真实验,可以直观地观察算法性能,对参数进行调整以优化定位效果。 在提供的1.doc文件中,...

    dv-hop算法的matlab原代码

    DV-HOP(Distance Vector Hop)算法是一种在无线传感器网络(WSN)中进行节点定位的流行方法。它基于距离矢量路由原理,利用节点间的通信范围和“跳数”来估算节点间的相对距离,从而实现网络中的位置估计。这种算法...

    距离向量(DV)算法实现

    在距离向量算法中,每个网络节点维护一个到其他所有节点的距离向量,其中的“距离”通常表示为跳数(hops)。每个节点周期性地向其邻居广播自己的距离向量,收到邻居的信息后,会根据这些信息更新自身的距离向量。这...

    76.MATLAB编程 模拟退火算法 源程序代码.zip

    ### 团队长期从事下列...##### 6.1 无线传感器定位(Dv-Hop定位优化、RSSI定位优化) ##### 6.2 无线传感器覆盖优化 ##### 6.3 无线传感器通信及优化(Leach协议优化) ##### 6.4 无人机通信中继优化(组播优化)

    dv-hop仿真_howeverts1_dv-hop_DV-HOP仿真_

    howeverts1可能是这些工具的一个定制版本或特定配置,用于模拟特定的网络条件和场景。 **DV-Hop仿真过程** 在仿真DV-Hop算法时,通常会涉及以下步骤: 1. **设置网络拓扑**: 创建WSN的虚拟布局,包括节点的位置、...

    【定位】基于非测距的定位算法Dv-Hop算法实现节点定位附Matlab代码.zip

    在这个压缩包中包含的"定位"基于非测距的定位算法Dv-Hop算法实现节点定位附Matlab代码.pdf,很可能是详细介绍了如何使用Matlab编写程序来模拟和实现Dv-Hop算法。这份文档可能包含了以下内容: 1. **算法描述**:...

    pso程序的源代码-粒子群优化算法基本程序

    本文将对一个基本的PSO程序进行解析,以帮助理解其工作原理。 首先,我们需要了解PSO的核心概念。每只“鸟”(粒子)有两个关键属性:位置(position)和速度(velocity)。在每次迭代中,粒子会根据自身的最佳位置...

    14.均匀线阵DOA估计Unitary -ESPRIT算法MATLAB程序.zip

    1.版本:matlab2014/2019...##### 6.1 无线传感器定位(Dv-Hop定位优化、RSSI定位优化) ##### 6.2 无线传感器覆盖优化 ##### 6.3 无线传感器通信及优化(Leach协议优化) ##### 6.4 无人机通信中继优化(组播优化)

    141859170738259_pso-dvhop_PSODV-HOP_粒子群Dv-hop_dv-hop_DV-hop粒子群_源

    描述中的"141859170738259_pso-dvhop_PSODV-HOP_粒子群Dv-hop_dv-hop_DV-hop粒子群_源码.zip"表明这个压缩包包含的是一个实现了结合了粒子群优化与Dv-hop算法的程序源代码。这种结合可能是为了改善无线传感器网络中...

    RSSI 定位算法

    例如,你可以模拟一个包含多个静态和动态节点的场景,记录和分析定位误差,从而优化算法参数。 在进行仿真时,需要注意以下几点: - **信号模型**:选择合适的信号传播模型,如自由空间传播模型、两维Log模型或三维...

    基于Matlab的WSN定位算法仿真设计.pdf

    节点的横纵坐标被存储在一个名为Sxy的矩阵中,其中Sxy的每一行代表一个节点的横纵坐标。信标节点和未知节点的坐标分别存储在B2和UN两个矩阵中,节点间的距离被计算并存储在D_all矩阵中。节点间的初始跳数矩阵h通过...

    Matlab实现无线传感器网络节点定位的算法

    本项目通过Matlab实现了一种无线传感器网络节点定位的算法,以下是关于这个主题的详细解释: 1. **无线传感器网络基础**: 无线传感器网络由传感器节点组成,这些节点具备数据采集、处理和无线通信能力。节点之间...

    易语言-易语言百度DV算法开源

    标题“易语言-易语言百度DV算法开源”表明这是一个使用易语言实现的百度动态验证(DV)算法的开源项目。在IT领域,动态验证码(DV)通常用于网络安全,防止恶意自动化程序如机器人进行非法操作,例如批量注册、刷票...

    WSN无线传感器网络的跟踪定位算法仿真,_使用matlab2021a或者以上版本测试

    在WSN领域,MATLAB可以用来设计和模拟各种复杂的通信协议、信号处理算法和定位策略。这里的"main.m"文件很可能是整个仿真项目的主程序,包含了设置网络参数、定义定位算法、执行仿真过程以及可能的结果分析代码。 ...

Global site tag (gtag.js) - Google Analytics