计算机网络——自顶向下方法,第四章编程作业,模拟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[