`
换个号韩国红果果
  • 浏览: 48063 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类

tcp 中fsm简化版的编写

    博客分类:
  • web
阅读更多
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;
		
	}
}	





分享到:
评论

相关推荐

    fsm_hello_fsm_hello_FSM_

    标题中的"fsm_hello_fsm_hello_FSM_"似乎是一个与有限状态机(Finite State Machine,FSM)相关的项目或文件命名约定,其中"hello"可能代表一个示例或特定的模块,而"FSM"是有限状态机的缩写。在描述中,我们只有一...

    有限状态机FSM在PLD中的实现分析.pdf

    有限状态机(FSM)是数字电子系统中的一种重要模型,用于设计和分析具备一定决策能力的系统。本文讨论了在可编程逻辑器件(PLD)中实现FSM的分析,特别是通过VHDL语言的描述和在EMP7032可编程逻辑器件上的合成特性...

    FSM.rar_FSM_FSM MATLAB

    标题中的"FSM.rar_FSM_FSM MATLAB"表明这是一个与MATLAB相关的文件,重点在于"FSM",它可能是“Focal Spot Measurement”的缩写,因为描述中提到了"Measurement of focal spot size using knife edge method",这...

    otg_fsm.rar_FSM_otg

    `otg_fsm.rar_FSM_otg`这个标题暗示了我们讨论的是关于ChipIdea USB IP核心中的OTG FSM驱动程序。 `otg_fsm.c`文件很可能是实现这个驱动的核心代码,它包含了FSM的定义、状态转换逻辑以及与OTG相关的操作处理。在...

    三段fsm设计

    在介绍如何在Verilog中编写FSM之前,我们需要先理解摩尔状态机与米利状态机的区别。摩尔状态机的输出信号在时钟的上升沿之前是不会改变的,这意味着无论输入信号何时改变,只要它们是在当前时钟周期内,输出信号的...

    视频中工程代码 class8_FSM

    视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM视频中工程代码 class8_FSM...

    FSM 有限状态机 verilog

    在数字电路设计中,有限状态机(Finite State Machine,简称FSM)是一种重要的控制结构,它能够使硬件系统按照预定义的顺序执行一系列操作。本文主要探讨了如何使用Verilog语言来描述和实现FSM,特别是Moore FSM和...

    fsm.rar_FSM_FSM code in vhdl_FSM vhdl

    在这个“fsm.rar”压缩包中,我们可以找到关于FSM设计的资源,特别是用VHDL编写的FSM代码。 FSM是一种逻辑控制单元,它可以被设计成具有多个状态,并根据输入信号和当前状态进行转换。这些状态之间的转换由一组预...

    fsm.zip_FSM实例_fsa_fsm例子

    通过这个`fsm.zip`文件,初学者可以学习如何定义状态、事件和转换,理解FSM的工作原理,并尝试编写自己的FSM实现。同时,也可以通过实例分析,加深对FSM在实际问题中的应用理解。对于进一步深入学习,推荐了解形式...

    FSM状态机的设计规则

    FSM(Finite State Machine,有限状态机)是一种常用的同步时序方式设计方法,广泛应用于 FPGA 设计中。FSM 状态机设计规则是指在设计 FSM 时需要遵守的一些基本原则和方法,以确保设计的正确性和可靠性。 首先,...

    用verilog语言编写的交通灯(FSM)

    在这个"用Verilog语言编写的交通灯(FSM)"项目中,我们关注的是如何使用Verilog来实现一个状态机(FSM),模拟实际生活中交通灯的运行规律。 交通灯的控制逻辑可以通过有限状态机来实现,这是一种非常常见且实用的...

    FSM-60S光纤熔接中文操作手册.pdf

    ### FSM-60S光纤熔接机:详细操作指南与安全规范 #### 一、重要安全须知 在使用FSM-60S光纤熔接机之前,必须全面理解并严格遵守以下安全规程和警告: 1. **环境条件**:确保工作区域干净、无尘、通风良好,并远离...

    fsm.zip_FSM

    在这里,它被用来读取描述FSM状态和转换的数据,并生成对应的C源代码,这可以极大地简化编程工作,特别是在处理复杂的状态变化逻辑时。 使用awk脚本来生成C代码的优势在于: 1. **简洁性**:awk的语法简洁,可以...

    FSM有限状态机demo

    总之,FSM是一个强大的工具,它可以帮助开发者将复杂逻辑分解为一系列清晰、独立的状态和转换,从而简化代码,提高可读性和可维护性。通过分析“FSM有限状态机demo”,我们可以学习如何构建和使用FSM,将这种理论...

    FSM状态机verilog实现

    有限状态机(FSM)是一种广泛应用于数字系统设计中的重要工具。它不仅被用来解决复杂的逻辑控制问题,还能有效地简化设计流程并提高系统的整体性能。在不同的编程语言中,FSM的实现方式各有特色。本文将重点探讨如何...

    FSM状态机生成工具

    标题中的“FSM状态机生成工具”是指一种用于创建有限状态机(Finite State Machine, FSM)的软件工具,它特别适用于编程领域。FSM是一种计算模型,由一系列状态、转移条件和动作组成,广泛应用于软件工程、计算机...

    FSM-clifford

    论文中指出,在FSM设计中,输出逻辑可以由组合逻辑产生,基于状态的比较,或者直接从特定状态位派生。然而,注册输出(即通过寄存器产生的输出)在合成优化中表现出显著优势。注册输出减少了毛刺现象,增强了设计的...

    fsm.rar_FSM_FSM vhdl_状态机

    状态机(Finite State Machine, FSM)是数字系统设计中一种重要的概念,特别是在VHDL这样的硬件描述语言中,它被广泛用于实现各种控制逻辑。在本压缩包“fsm.rar”中,我们可以看到一系列与FSM相关的VHDL代码实例,...

    FSM.rar_FSM

    有限状态机(FSM,Finite State Machine)是数字系统设计中的一个重要概念,尤其在FPGA(Field-Programmable Gate Array)开发中扮演着核心角色。这篇教程将深入讲解FSM设计的基本原理、技巧和方法,帮助FPGA新手...

    SNOW3G使用的FSM

    SNOW 3G,全称为“Simplified New Orthogonal Frequency Division Multiplexing ...在研究“SNOW3G FSM”的过程中,对压缩包中的“FSM”文件进行深入分析,可以揭示算法的细节,帮助我们更好地理解和实现这一加密技术。

Global site tag (gtag.js) - Google Analytics