W5500以太网模块使用socket0做服务器模式有个RST报文的问题

W5500以太网模块使用socket0做服务器模式有个RST报文的问题:

用中断查询的方式,查到Sn_IR寄存器有DISCON标志位时认为断开连接,此时在closewait半关断状态向CR寄存器写入DISCON之后紧接着执行了向CR寄存器写入close函数,所以出现挥手时一个RST报文;
在这里插入图片描述
解决办法:
W5500的状态查询流程不使用中断标志作为判断依据,使用Sn_SR寄存器的状态作为判断依据,W5500总体逻辑如下;
①、初始化SPI
②、硬件复位W5500
③、装载W5500网络参数,如ip地址,网关等;
④、执行状态机:
在这里插入图片描述

在状态机里的ESTABLISHED状态做查询Sn_IR中断的RECV标志,如果置位则有数据到达,进行处理;
如果客户端断开连接,会在CLOSE_WAIT状态,W5500向Sn_CR寄存器写入DISCON之后SR寄存器进入CLOSED状态,在CLOSED状态内先关掉socket,然后设置端口号,设置为TCP模式,设置keepalive时间,打开socket,当打开socket成功且MR处于TCP模式时,进入INIT状态,此时服务器可打开监听,打开监听后如果客户端连接请求被成功接收,则进入ESTABLISHED状态;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值