W5500 keep-alive的用途与用法--新华龙电子
大家是否遇到过这样的问题,W5500作为服务器已经建立连接,突然网线掉了,然后再去连接W5500,就连不上了。为什么?下面对这个问题进行解释说明,并提出解决办法。
图1中的上位机程序作为客户端,连接W5500服务器。

图2是对这个问题的wireshark抓包说明。其中192.168.11.114为W5500的IP,192.168.11.110为PC的IP。下图中的第48个包是第一次握手:建立连接时,客户端发送SYN包到服务器,等待服务器确认;第49个包为第二次握手:服务器收到SYN包,必须确认客户的SYN同时自己也发送一个SYN包,即SYN+ACK包。第50个包为第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。在第70个包中显示,PC向W5500发送9个字节数据,在第73个包中,W5500向PC发送9个字节数据。此时,突然拔掉网线,并点击图1 “Disconnect”按钮,图1中的第160个包显示的是PC发送FIN+ACK包,第161包,W5500发送应答。然后连上网线,并且点击图3的“connect”,但是无法连接。
这是因为,网线没掉之前,W5500处于SOCK_ESTABLISHED状态,此时突然拔掉网线,SOCKET状态没变,还是SOCK_ESTABLISHED状态,没有监听,所以无法再次连接。
图1 wireshark抓包

图2 上位机建立连接

图3 网线掉了,再插上网线连接不上
解决方法:
Sn_KPALVTR寄存器配置了socket n 的keep-alive包传输时间间隔。只在TCP模式下生效,单位时间为5秒。Keep-alive包会在Sn-SR 寄存器变为SOCK_ESTABLISHED之后,且与对方至少进行过一次收或发的通信后进行传输。如果Sn_KPALVTR>0,W5500在设置的时间间隔后自动传输keep-alive包以检查TCP的连接状态(自动在线检验),如果对方不能在超时计数期内反馈keep-alive包,这个连接将会被关闭并触发超时中断。如果‘Sn_KPALVTR = 0’,将不会启动自动在线验证,主机可以通过向寄存器Sn-CR写入SEND_KEEP命令发送keep-alive包(手动在线验证)。在‘Sn_KPALVTR> 0’时,将会无视手动在线验证。
自动检验:只需在主函数中,向寄存器Sn_KPALVTR写入不为0的数,即可启动自动在线检验。在函数中写入下面的函数,那么在W5500与对方进行过一次数据通信后,10秒后W5500自动发送keep-alive包。
例如:voidsetkeepalive(SOCKET s)
{
IINCHIP_WRITE(Sn_KPALVTR(s),0×02);
}
Wireshark抓包如图4
1-3包是三次握手过程,5-10包是发送和接收数据的过程,19包是W5500向PC发送keep-alive包,20包是PC对keep-alive包的应答。10秒之后,即是第30包,W5500又发送一次keep-alive包。此时拔掉网线,点击“Disconnect”。10秒之后,W5500发送的keep-alive包没有反应,SOCKET关闭。然后连上网线,点击“Connect”按钮,可以重新建立连接,109-111包是第二次建立连接过程。
图4 启用keep-alive后可以重新建立连接

以上演示的是自动发送keep-alive包的过程,如果想手动发送keep-alive包,把Sn_KPALVTR寄存器写入0,当向Sn-CR写入SEND_KEEP命令时,W5500发送一次keep-alive包。
voidsend_ka(SOCKET s)
{
IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND_KEEP);
return;
}
By Catherine
程序下载:http://wizwiki.net/forum/viewtopic.php?f=90&t=1072 更多W5500问题,请联系新华龙电子技术工程师或访问:http://www.xhl.com.cn/ylogin/w5500.asp !
W5500 keep-alive的用途与用法--新华龙电子的更多相关文章
- 新华龙电子推出最新网络开发板(W5100&W5500方案)
2014/12/16 | Filed under: TCP/IP芯片 and tagged with: C8051, W5100, W5500, 新华龙电子, 网络开发板 42 Views 深圳新华龙 ...
- 拷贝别人的drawRect绘图分类用途、用法很全。
拷贝被人的drawRect绘图分类用途,用法很全.留着.供用时参考 // Only override drawRect: if you perform custom drawing. // An em ...
- W5500EVB UDP模式的测试与理解-新华龙电子
WIZnet 之前已经介绍过W5500EVB 在TCP模式下的两种(Server及Client)数据传输的实现过程,那么传输控制协议中,UDP也是非常常用的,这种无连接的协议在更多场合为用户提供了便捷 ...
- java中static、this、super、final用途、用法及实例
一.static 请先看下面这段程序: public class Hello { public static void main(String[] args){ //(1) System.out.pr ...
- Attributes.Add用途与用法
Attributes.Add("javascript事件","javascript语句"); 如: this.TextBox1.Attributes.add(& ...
- elasticsearch配置文件中http.cors.x字段有哪些用途和用法
http.cors.enabled 是否支持跨域,默认为false http.cors.allow-origin 当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使 ...
- W5200移植W5500驱动教程
说明,移植例程为我按照这个教程移植的例程,测试通过.工程模板为我经常使用的一个w5500模板,可以在里面直接添加文件编程.1. 将driver文件夹中W5500文件夹和所有.c文件复制到工程/sour ...
- ASP.NET Core MVC 模型绑定用法及原理
前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...
- window中findstr命令的用法
http://www.netingcn.com/window-findstr-command.html findstr是window系统自带的命令,用途是查找指定的一个或多个文件文件中包含(或通过参数 ...
随机推荐
- phpstorm10.0.1 注册
注册时选择License server,填http://idea.lanyus.com,然后点击OK,就注册了
- thinkphp基于角色的权限控制详解
一.什么是RBAC 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注. 在RBAC中,权限与角色相关联,用户通 ...
- 安装Nginx的Dockerfile实例
#################################################Dockerfile to build Nginx Installed Containers##Bas ...
- select,poll,epoll区别
select:忙轮询,一直在轮询,效率跟链接数成反比,资源限制 poll:轮询,不用一直轮询,有事件触发时轮询,资源限制 epoll:有事件触发时直接通知复杂度O(1)
- 【转载】Restarting an analysis in ANSYS
原文地址:http://blog.sina.com.cn/s/blog_4b764640010168ru.html 这是自己最近做的一个例子,一是为了感谢okok论坛给与我的很大的帮助,二是起到抛 ...
- 印刷电路板(PCB)的材料
以玻璃为基础材料的板材可以在高达150℃到250℃的温度下使用.可选的介质材料有: FR4,介电常数ε0为4.6 环氧材料,介电常数ε0为3.9: 聚酰亚胺,介电常数ε0为4.5. 另外,以聚四氟乙烯 ...
- linux下利用GPRS模块发短信、打电话
一.开发环境 内核版本:linux-3.0 开发板:FL2440(nandflash:K9F1G08 128M) GPRS模块:SIM900 二.与发短信和拨号相关的 AT 指 ...
- 基于XML的AOP配置-转
http://www.cnblogs.com/yangy608/archive/2010/11/14/1876839.html AOP(Aspect-Oriented Programming,面向切面 ...
- 数据库服务器CPU持续百分之百、部分Session一直处于执行状态---等待事件为:asynch descriptor resize(Oracle Bug )
问题描述: 项目反馈数据库服务器的CPU持续100%的情况,跟踪发现很多活动会话的等待事件是“asynch descriptor resize”,并且这些会话一直处于Active状态,而这些会话执行的 ...
- Stream 和 byte[] 之间的转换
Stream 和 byte[] 之间的转换 一. 二进制转换成图片 ? 1 2 3 4 5 MemoryStream ms = new MemoryStream(bytes); ms.Position ...