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

📄 sender.java

📁 这是一个虚拟网络模拟器
💻 JAVA
字号:
//: Sender.java
// ݻЭͨŵݷͷ
//package classes;
import java.awt.*;
import java.util.*;
import javax.swing.*;
//import java.lang.*;
public class Sender extends Thread
{
	private boolean isRun;			// ߳б־
	private boolean isPause;		// ߳ͣ־
	private int sleepTime = 1000;	// ߳ʱ
	private int time = 30;			// ʱʱ
	private int maxSeq;				// ֡
	private int windowSize;			// ڴС
	private ComChannel channel;		// ͨŵ
	private SendPanel  panel;		// ʾ
	
	private int next;				// һ֡
	private int repeatSeq;			// ѡط֡
	private int ackExcepted;		// һȷ֡
	private int nBuffer;			// ѱռõĴڴС
	private Packet[] buffer;		// ֡
	private boolean isGoBackN;	
	
	private jishi timer;			// ʱ
	private ReceiveAck receiveAck;	// ȷ
	
	Sender(ComChannel channel,int maxSeq,int windowSize,SendPanel panel)
	{
		this.channel = channel;		// 
		this.maxSeq  = maxSeq;
		this.windowSize = windowSize;
		this.panel = panel;
		
		next = 0;					// ʼ
		repeatSeq   = -1;			// ĬûҪѡط֡
		ackExcepted = 0;
		nBuffer = 0;
		isRun   = false;
		isPause = false;
		buffer  = new Packet[maxSeq+1];
		timer   = new jishi(time,this);
		receiveAck = new ReceiveAck(this,channel);
		if(windowSize==maxSeq)		// N֡
		{
			isGoBackN = true;
		}
		else						// ѡش
		{
			isGoBackN = false;
		}
	}
	
	// ʼ
	public void start()
	{
		if(isRun==false)
		{
			isRun = true;
			panel.start();			// ֪ͨʾ
			timer.start();			// ʼʱ
			receiveAck.start();		// ֪ͨȷϵ߳
			super.start();
		}
	}
	
	// ֹͣ
	synchronized public void close()
	{
		receiveAck.close();			// ֪ͨȷϵ߳
		timer.close();				// ֹͣʱ
		panel.stop();				// ֪ͨʾ
		isRun = false;
		synchronized(this)
		{			
			if(this.getState()==Thread.State.WAITING)
			{
				//System.out.println("ReceiveAck.notify()");//!!!!!!!!!
				this.notify();		// ֪ͨ
			}
		}
		System.out.println("ReceiveAck.close()");//!!!!!!!!
	}
	
	// ͣ
	public void pause()
	{
		timer.pause();				// ͣʱ
		receiveAck.pause();			// ͣȷ	
		isPause = true;
	}
	
	// 
	public boolean isPause()
	{
		return isPause;
	}
	 
	// 
	synchronized public void continu()
	{
		isPause = false;
		timer.continu();
		if(receiveAck!=null)
		{
			receiveAck.continu();	// ֪ͨȷϵ߳
		}			
		if(this.getState()==Thread.State.WAITING)
		{
			//System.out.println("ReceiveAck.notify()");//!!!!!!!!!
			this.notify();		// ֪ͨ
		}
		//System.out.println("ReceiveAck.continu()");//!!!!!!!!!
	}
	
	// k1ؽ
	private int inc(int k)
	{
		if(k<maxSeq)
		{
			k++;
		}
		else
		{
			k = 0;
		}
		return k;
	}
	
	// k1ؽ
	private int dec(int k)
	{
		if(k>0)
		{
			k--;
		}
		else
		{
			k = maxSeq;
		}
		return k;
	}
	
	// bac֮,ͷtrue;

⌨️ 快捷键说明

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