- 浏览: 11741 次
最新评论
计算机网络——自顶向下方法,第四章编程作业,模拟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语言来实现一种路由算法——距离矢量(Distance Vector, DV)算法。这种算法是网络路由协议中的一种基础算法,常用于解决网络节点间如何有效地传递路由信息的问题。 DV...
这款名为“DV算法模拟软件”的程序,就是为了让用户能够直观地理解和学习DV算法的工作原理而设计的。 DV算法基于贝尔曼-福特(Bellman-Ford)公式,它的核心思想是通过不断交换距离向量来更新路由表,以确定最佳...
在DV算法中,每个路由器维护一个路由表,包含了到达各个网络目标的距离以及下一跳路由器的信息。这个距离通常指的是跳数,但也可能是其他网络度量,如带宽、延迟等。 **Java编程**是实现DV路由算法的常用工具,因为...
本压缩包包含了一个关于DV-Hop算法的文档(ժҪ.doc)以及两个MATLAB程序(Untitled4.m和DV_Hop最终.m),用于帮助理解和实践该算法。 首先,我们来看DV-Hop算法的基本原理。在WSN中,通常有一些已知位置的节点称为...
描述中提到的“网络DV算法源代码比较简单,就是模拟路由器分布式选路”,暗示了这个压缩包内可能包含了一个简单的DV算法实现,用于演示或教学目的。分布式选路是DV算法的核心应用,它让网络中的每个路由器都能够独立...
在MATLAB中,可以编写程序模拟DV-Hop算法的运行过程,包括节点布局、信号传播、hop计数、距离估计和定位计算等步骤。通过仿真实验,可以直观地观察算法性能,对参数进行调整以优化定位效果。 在提供的1.doc文件中,...
DV-HOP(Distance Vector Hop)算法是一种在无线传感器网络(WSN)中进行节点定位的流行方法。它基于距离矢量路由原理,利用节点间的通信范围和“跳数”来估算节点间的相对距离,从而实现网络中的位置估计。这种算法...
在距离向量算法中,每个网络节点维护一个到其他所有节点的距离向量,其中的“距离”通常表示为跳数(hops)。每个节点周期性地向其邻居广播自己的距离向量,收到邻居的信息后,会根据这些信息更新自身的距离向量。这...
### 团队长期从事下列...##### 6.1 无线传感器定位(Dv-Hop定位优化、RSSI定位优化) ##### 6.2 无线传感器覆盖优化 ##### 6.3 无线传感器通信及优化(Leach协议优化) ##### 6.4 无人机通信中继优化(组播优化)
howeverts1可能是这些工具的一个定制版本或特定配置,用于模拟特定的网络条件和场景。 **DV-Hop仿真过程** 在仿真DV-Hop算法时,通常会涉及以下步骤: 1. **设置网络拓扑**: 创建WSN的虚拟布局,包括节点的位置、...
在这个压缩包中包含的"定位"基于非测距的定位算法Dv-Hop算法实现节点定位附Matlab代码.pdf,很可能是详细介绍了如何使用Matlab编写程序来模拟和实现Dv-Hop算法。这份文档可能包含了以下内容: 1. **算法描述**:...
本文将对一个基本的PSO程序进行解析,以帮助理解其工作原理。 首先,我们需要了解PSO的核心概念。每只“鸟”(粒子)有两个关键属性:位置(position)和速度(velocity)。在每次迭代中,粒子会根据自身的最佳位置...
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粒子群_源码.zip"表明这个压缩包包含的是一个实现了结合了粒子群优化与Dv-hop算法的程序源代码。这种结合可能是为了改善无线传感器网络中...
例如,你可以模拟一个包含多个静态和动态节点的场景,记录和分析定位误差,从而优化算法参数。 在进行仿真时,需要注意以下几点: - **信号模型**:选择合适的信号传播模型,如自由空间传播模型、两维Log模型或三维...
节点的横纵坐标被存储在一个名为Sxy的矩阵中,其中Sxy的每一行代表一个节点的横纵坐标。信标节点和未知节点的坐标分别存储在B2和UN两个矩阵中,节点间的距离被计算并存储在D_all矩阵中。节点间的初始跳数矩阵h通过...
本项目通过Matlab实现了一种无线传感器网络节点定位的算法,以下是关于这个主题的详细解释: 1. **无线传感器网络基础**: 无线传感器网络由传感器节点组成,这些节点具备数据采集、处理和无线通信能力。节点之间...
标题“易语言-易语言百度DV算法开源”表明这是一个使用易语言实现的百度动态验证(DV)算法的开源项目。在IT领域,动态验证码(DV)通常用于网络安全,防止恶意自动化程序如机器人进行非法操作,例如批量注册、刷票...
在WSN领域,MATLAB可以用来设计和模拟各种复杂的通信协议、信号处理算法和定位策略。这里的"main.m"文件很可能是整个仿真项目的主程序,包含了设置网络参数、定义定位算法、执行仿真过程以及可能的结果分析代码。 ...