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

📄 frame.java

📁 total是最后的版本。包括的全是最新的物理层和数据链路层。另外还有pro1和pro2的打包程序和调用它们形成的各自的界面程序
💻 JAVA
字号:
/*Frame construction class definition.Definite the construction of
 *the cheng frame quan in the Datalink_Layer. The data(Packet) 
 *from the Network_Layer is formed into frame and then handed down
 *to the Physical_Layer to translate. At the same time, The data
 *(Frame) from the Physical_Layer is unframed,and the info of that
 *(Packet) is handed up to the Network_Layer.*/

package chq;
import javax.swing.*;

public class frame{
	public String kind,info,kindbits,seqbits,ackbits,infobits;
	public int seq,ack;
	public int MAX_SEQ=8;
	public int MAX_PKT=1024; 
	public StringBuffer frameBuffer_s=new StringBuffer(2+2*log2(MAX_SEQ)+MAX_PKT);	
	public StringBuffer frameBuffer_r=new StringBuffer(2+2*log2(MAX_SEQ)+MAX_PKT);
	
	public frame()
	{
		kind="init";     //frame kind contain{init,data,ack,nak}
		seq=-1;
		ack=-1;
		info="";	
	} //frame constructor for init
	
	public frame(String ki,int se,int ac,String in)
	{
		setkind(ki);
		setseq(se);
		setack(ac);
		setinfo(in);
	}//end of frame constructor
	

	public void setkind(String ki) //frame kind={data,ack,nak}
	{	if(ki=="data"||ki=="ack"||ki=="nak") kind=ki;
		else JOptionPane.showMessageDialog(null,"Error kind input",
			"Error",JOptionPane.ERROR_MESSAGE);	}
	
	public void setseq(int se) //seq from 0-MAX_SEQ
	{	if(se>=0&&se<=MAX_SEQ) seq=se;
		else JOptionPane.showMessageDialog(null,"Error seq confine",
			"Error",JOptionPane.ERROR_MESSAGE);	}
	
	public void setack(int ac) //ack from 0-MAX_SEQ
	{	if(ac>=0&&ac<=MAX_SEQ) ack=ac;
		else JOptionPane.showMessageDialog(null,"Error ack confine",
			"Error",JOptionPane.ERROR_MESSAGE);	}
	
	public void setinfo(String in) //info.length<=MAX_PKT
	{	if(in.length()<=MAX_PKT) info=in;
		else JOptionPane.showMessageDialog(null,"Error info confine",
			"Error",JOptionPane.ERROR_MESSAGE);	}
	
	public void framing()
	{
		if(kind=="init") kindbits="00"; //add kindbits to stringFrame
		else if(kind=="data") kindbits="01";
		else if(kind=="ack") kindbits="10";
		else if(kind=="nak") kindbits="11";
		frameBuffer_s.append(kindbits);
		
		seqbits=getBits(seq);	//add seqbits to stringFrame
		frameBuffer_s.append(seqbits);
		
		ackbits=getBits(ack);	//add ackbits to stringFrame
		frameBuffer_s.append(ackbits);
		
		infobits=info;			//add infobits to stringFrame
		frameBuffer_s.append(infobits);
		
	}
	
	/*
	public String showFrameString_s()
	{
		return "kind:"+kind+";seq:"+seq+";ack:"+ack+";info:"+info+"\n";
	}
	
	public String showFramebits_s()
	{
		return "kindbits:"+kindbits+";  seq:"+seqbits+
				";  ack:"+ackbits+";  infobits:"+infobits+"\n";	
	}*/
	
	public void unFraming(String fr)
	{
		frameBuffer_r.append(fr);
		kindbits=frameBuffer_r.substring(0,2); //unframe kindbits of the Stirng
		if(kindbits.equals("00")) kind="init"; 
		if(kindbits.equals("01")) kind="data";
		if(kindbits.equals("10")) kind="ack";
		if(kindbits.equals("11")) kind="nak";
		
		seqbits=frameBuffer_r.substring(2,6); //unframe seqbits/seq of the Stirng
		seq=getInt(seqbits);
		
		ackbits=frameBuffer_r.substring(6,10); //unframe ackbits/ack of the Stirng
		ack=getInt(ackbits);

		infobits=frameBuffer_r.substring(10); //unframe infobits/info of the Stirng
		info=infobits;
	}

	public String showFramebits()
	{	return "kindbits:"+kindbits+";  seq:"+seqbits+";  ack:"
			+ackbits+";  infobits:"+infobits;	}
	
	public String showFrameString()
	{	return "kind:"+kind+";seq:"+seq+";ack:"+ack+";info:"+info;}
	
	public String getFormedFrame()
	{	return frameBuffer_s.toString();} 
	
	public String getReceivedFrame()
	{	return frameBuffer_r.toString();}
	
	
	public String getKind()
	{
		return kind;
	}
	
	
	//following is some method of reversing math
	// reverse specified int value to bits representation
	private String getBits( int value ){
		int displayMask = 1 <<3;
      	StringBuffer buffer = new StringBuffer(6); // buffer for output

      	for ( int bit = 1; bit <=4; bit++ ) {
         	buffer.append( ( value & displayMask ) == 0 ? '0' : '1' );
         	value <<= 1; 
		}  //end for

      	return buffer.toString();
   	}	 // end method getBits
   	
   	private int getInt(String val){
		StringBuffer buffer=new StringBuffer(val);// buffer for output
		int value=0;
		for(int bit=val.length()-1;bit>0;bit--)
		{
			int c=Character.getNumericValue(buffer.charAt(bit));
			for(int i=0;i<val.length()-bit-1;i++)
			{	c=c*2;	}
			value=value+c;
		}
		return value;
	} //End of getInt
	
	private int log2(int a){
		int i=0;
		while(a!=1){
			a=a/2;
			i++;}
		return i;	
	}
	
	
} //end of class frame

⌨️ 快捷键说明

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