📄 transition.java
字号:
import java.util.Hashtable;
import java.util.*;
public class Transition{
State CLOSED=new State("CLOSED");
State LISTEN=new State("LISTEN");
State SYN_RCVD=new State("SYN_RCVD");
State FIN_WAIT_1=new State("FIN_WAIT_1");
State FIN_WAIT_2=new State("FIN_WAIT_2");
State CLOSING=new State("CLOSING");
State TIME_WAIT=new State("TIME_WAIT");
State LAST_ACK=new State("LAST_ACK");
State CLOSE_WAIT=new State("CLOSE_WAIT");
State SYN_SENT=new State("SYN_SENT");
State ESTABLISHED=new State("ESTABLISHED");
ArrayList events=new ArrayList();
FSMEvent PASSIVE=new FSMEvent("PASSIVE");
FSMEvent ACTIVE=new FSMEvent("ACTIVE");
FSMEvent SYN=new FSMEvent("SYN");
FSMEvent SYNACK=new FSMEvent("SYNACK");
FSMEvent ACK=new FSMEvent("ACK");
FSMEvent RDATA=new FSMEvent("RDATA");
FSMEvent SDATA=new FSMEvent("SDATA");
FSMEvent FIN=new FSMEvent("FIN");
FSMEvent CLOSE=new FSMEvent("CLOSE");
FSMEvent TIMEOUT=new FSMEvent("TIMEOUT");
State c=CLOSED;
public Transition(){
CLOSED.addTransition(PASSIVE,LISTEN);
CLOSED.addTransition(ACTIVE,SYN_SENT);
CLOSED.addTransition(SYN,SYN_SENT);
LISTEN.addTransition(SYNACK,SYN_RCVD);
LISTEN.addTransition(SYN,SYN_RCVD);
SYN_RCVD.addTransition(FIN,FIN_WAIT_1);
SYN_RCVD.addTransition(CLOSE,FIN_WAIT_1);
FIN_WAIT_1.addTransition(ACK,FIN_WAIT_2);
FIN_WAIT_1.addTransition(FIN,CLOSING);
FIN_WAIT_2.addTransition(FIN,TIME_WAIT);
FIN_WAIT_2.addTransition(ACK,TIME_WAIT);
SYN_SENT.addTransition(CLOSE,CLOSED);
SYN_SENT.addTransition(SYNACK,ESTABLISHED);
SYN_SENT.addTransition(ACK,ESTABLISHED);
ESTABLISHED.addTransition(FIN,CLOSE_WAIT);
ESTABLISHED.addTransition(ACK,CLOSE_WAIT);
ESTABLISHED.addTransition(SDATA,ESTABLISHED);
ESTABLISHED.addTransition(RDATA,ESTABLISHED);
CLOSE_WAIT.addTransition(CLOSE,LAST_ACK);
CLOSE_WAIT.addTransition(FIN,LAST_ACK);
LAST_ACK.addTransition(ACK,CLOSED);
}
public FSMEvent StrEvent(String e){
FSMEvent event=new FSMEvent();
if(e.equals("PASSIVE")){
event=PASSIVE;
}
else if(e.equals("ACTIVE")){
event=ACTIVE;
}
else if(e.equals("SYN")){
event=SYN;
}
else if(e.equals("SYNACK")){
event=SYNACK;
}
else if(e.equals("ACK")){
event=ACK;
}
else if(e.equals("RDATA")){
event=RDATA;
}
else if(e.equals("SDATA")){
event=SDATA;
}
else if(e.equals("FIN")){
event=FIN;
}
else if(e.equals("CLOSE")){
event=CLOSE;
}
return event;
}
public String StateTransit(String e){
State o=c;
c=(State)c.nextState.get(StrEvent(e));
return o.name+"接受状态"+e+",转移到"+c.name;
}
public State StateTrans(){
return (State)CLOSED.nextState.get(PASSIVE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -