当前位置:首页 > 开发 > Web前端 > 前端 > 正文

tcp 中fsm简化版的编写

发表于: 2015-05-01   作者:换个号韩国红果果   来源:转载   浏览:
摘要: fsm 是当前状态+输入=末状态 参数表 Format is INITIAL_STATE: EVENT -> NEW_STATE CLOSED: APP_PASSIVE_OPEN -> LISTEN CLOSED: APP_ACTIVE_OPEN  -> SYN_SENT LISTEN: RCV_SYN    
fsm 是当前状态+输入=末状态

参数表
Format is INITIAL_STATE: EVENT -> NEW_STATE
CLOSED: APP_PASSIVE_OPEN -> LISTEN

CLOSED: APP_ACTIVE_OPEN  -> SYN_SENT

LISTEN: RCV_SYN          -> SYN_RCVD

LISTEN: APP_SEND         -> SYN_SENT

LISTEN: APP_CLOSE        -> CLOSED

SYN_RCVD: APP_CLOSE      -> FIN_WAIT_1

SYN_RCVD: RCV_ACK        -> ESTABLISHED

SYN_SENT: RCV_SYN        -> SYN_RCVD

SYN_SENT: RCV_SYN_ACK    -> ESTABLISHED

SYN_SENT: APP_CLOSE      -> CLOSED

ESTABLISHED: APP_CLOSE -> FIN_WAIT_1

ESTABLISHED: RCV_FIN   -> CLOSE_WAIT

FIN_WAIT_1: RCV_FIN     -> CLOSING

FIN_WAIT_1: RCV_FIN_ACK -> TIME_WAIT

FIN_WAIT_1: RCV_ACK     -> FIN_WAIT_2

CLOSING: RCV_ACK -> TIME_WAIT

FIN_WAIT_2: RCV_FIN -> TIME_WAIT

TIME_WAIT: APP_TIMEOUT -> CLOSED

CLOSE_WAIT: APP_CLOSE -> LAST_ACK

LAST_ACK: RCV_ACK -> CLOSED





我的处理方案  当前状态+输入=末状态  2个状态一个输入恰好可以构成一个字符串用|连接,刚好组成一个数组,再遍历数组各个元素搜索状态,搜索输入  若匹配则将第3个赋予state
代码如下:
var FSMData=[//构建数组
'CLOSED | APP_PASSIVE_OPEN | LISTEN',

'CLOSED | APP_ACTIVE_OPEN |SYN_SENT',

'LISTEN| RCV_SYN         | SYN_RCVD',

'LISTEN| APP_SEND        | SYN_SENT',

'LISTEN| APP_CLOSE        | CLOSED',

'SYN_RCVD| APP_CLOSE      | FIN_WAIT_1',

'SYN_RCVD| RCV_ACK        | ESTABLISHED',

'SYN_SENT| RCV_SYN        | SYN_RCVD',

'SYN_SENT| RCV_SYN_ACK    | ESTABLISHED',

'SYN_SENT| APP_CLOSE      | CLOSED',

'ESTABLISHED| APP_CLOSE | FIN_WAIT_1',

'ESTABLISHED| RCV_FIN   | CLOSE_WAIT',

'FIN_WAIT_1| RCV_FIN     | CLOSING',

'FIN_WAIT_1| RCV_FIN_ACK | TIME_WAIT',

'FIN_WAIT_1| RCV_ACK     | FIN_WAIT_2',

'CLOSING| RCV_ACK | TIME_WAIT',

'FIN_WAIT_2|RCV_FIN | TIME_WAIT',

'TIME_WAIT|APP_TIMEOUT | CLOSED',

'CLOSE_WAIT| APP_CLOSE | LAST_ACK',

'LAST_ACK| RCV_ACK | CLOSED']

function traverseTCPStates(eventList){
  var state = "CLOSED";  // initial state, always
  for(var i=0;i<eventList.length;i++)
	{
		
		if(! judge (eventList[i]) )  return state;
//若返回false,不再进行,返回
	}
  return state;//最终返回
  
  
  function judge(_eventListPara){
//判断该输入是否有匹配,有的话更改state,返回//true,无返回false  更改state为error
	

		
	for(var j=0; j<FSMData.length; j++)
		{
		FSMData [j]=FSMData [j].replace(/\s+/g,'');//去空格因为数组不会自动去空格
		var arr=FSMData [j].split("|");//剥离三个东东
		if(arr[0]==state && arr[1]==_eventListPara) 
			{
				 state= arr[2];
				 
				 return true;
			}
		}
		
		state ='ERROR';
		return false;
		
	}
}	





tcp 中fsm简化版的编写

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1 FSM
Moore and Mealy machine The next state and the outputs of a Mealy machine depend on the prese
刚自学Unity,发现Unity 之所以很火,因为很多系统,编辑器,还有一些设计很强大,用起来都比较容易
服务器端Code: // TcpSrv.cpp // dxh1688@gmail.com #include < Winsock2.h > #include <
Pascal简化版 一、简介 1.不允许全局变量,全局区域只有函数定义 2.只能在函数的var里进行变量声明
一、通信流程 TCP: UDP: 部分函数知识可以参考之前写的 Linux 网络编程——TCP TCP通信: 客户端:
转自:http://book.51cto.com/art/200911/162899.htm 有限状态机有两种基本类型:米利(Mealy)机和
转自:http://book.51cto.com/art/200911/162899.htm 有限状态机有两种基本类型:米利(Mealy)机和
转自:http://book.51cto.com/art/200911/162899.htm 有限状态机有两种基本类型:米利(Mealy)机和
<o:p> </o:p> OSWorkflow是基于FSM(finite state machine,有限状态机)理论。每一个s
FSM设计之一http://www.cnblogs.com/qiweiwang/archive/2010/11/28/1890244.html   Moore型状态机
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号