一个模拟DV算法的程序

该博客介绍了如何使用Java编程实现计算机网络中的DV算法。内容包括基于《计算机网络——自顶向下方法》第四章的编程作业,通过模拟四个Node来运行数据,这些数据直接来源于书本。虽然可以在Eclipse环境中运行,但由于需要锁定控制台操作,因此操作过程稍显复杂。
摘要由CSDN通过智能技术生成

计算机网络——自顶向下方法,第四章编程作业,模拟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[
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值