📄 frame.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 + -