⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receivethread.java

📁 这是一个用Java编写的路由器模拟程序。可以利用计算机模拟路由器实现路由表的生成、转发等等功能。
💻 JAVA
字号:
import java.net.*;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.util.concurrent.*;
class ReceiveThread extends Thread
{
    //The Router that spawned this thread
	//这个程序需要知道某个路由器的邻居节点

    //The port on which this thread listens for Distance Vector packets
    private  Router router;
    private int routerId;
    private HashSet<Integer> neighborPorts;
    private int routerPort;
    private boolean flag=false;
    public ReceiveThread(Router rt)
    {
	super("ReceiveThread");

	router=rt;
	neighborPorts=rt.getNeighborPorts();
	routerId=rt.getID();
	routerPort=rt.getRouterPort();
	//start the thread
	start();
    }
    
    public int getRouterId()
    {
    		return routerId;
    }
    public int getRouterPort()
    {
    		return routerPort;
    }
    public HashSet<Integer> getneiborPorts()
    {
    		return neighborPorts;
    }
    
    public void run()
    {
	//The socket for representing accepted connection
		ServerSocket server=null;
		Socket client=null;
		//ObjectInputStream ois;
		while(true)
		{
			try
			{
				server=new ServerSocket(this.getRouterPort());//
				client=server.accept();
			}
			catch(Exception exp)
			{
				System.out.println("WWWWWWWWWWWWWWWWWWWWW");
				exp.printStackTrace();
			}
			try
			{
				ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
				//Packets pks=(Packets)ois.readObject();
				Object obj=ois.readObject();
				if(obj instanceof Packets)				//如果是Packets
				{
					Packets pks=(Packets)obj;			//从包里面得到是谁发送的 
					router.processDV(pks);
				}
				else
				{
					DataPacket dpk=(DataPacket)obj;
					Integer des=dpk.getDes();
					if(router.getID()!=des.intValue())
					{
						System.out.println("F"+des);
						router.retDataPacket(dpk);
						Router.DataFlag=true;
					}
					else
					{
						System.out.println("Have received the DataPacket:"+dpk.getData());
						Router.DataFlag=false;
					}
					
				}
				/*
				HashSet<Packet> packetstore=pks.getPackets();
				Iterator itt=packetstore.iterator();
				Integer whosendpks=((Packet)itt.next()).getSender();
				if((Router.isTimeOut).containsKey(whosendpks))
				{
					(Router.isTimeOut).remove(whosendpks);
					(Router.isTimeOut).put(whosendpks,new Integer(0));
				}
				*/
				//ois.close();			//本来这里是没有注释掉的
				try
				{
				ois.close();
				server.close();
				}
				catch(Exception x)
				{
					System.out.println("KKKKKKKKKKKKKKKK");
					x.printStackTrace();
				}
			}
			catch(Exception ex)
			{
				System.out.print("cccccccccccccccc");
				ex.printStackTrace();
			}
			
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -