大家是否遇到过这样的问题,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的用途与用法--新华龙电子的更多相关文章

  1. 新华龙电子推出最新网络开发板(W5100&W5500方案)

    2014/12/16 | Filed under: TCP/IP芯片 and tagged with: C8051, W5100, W5500, 新华龙电子, 网络开发板 42 Views 深圳新华龙 ...

  2. 拷贝别人的drawRect绘图分类用途、用法很全。

    拷贝被人的drawRect绘图分类用途,用法很全.留着.供用时参考 // Only override drawRect: if you perform custom drawing. // An em ...

  3. W5500EVB UDP模式的测试与理解-新华龙电子

    WIZnet 之前已经介绍过W5500EVB 在TCP模式下的两种(Server及Client)数据传输的实现过程,那么传输控制协议中,UDP也是非常常用的,这种无连接的协议在更多场合为用户提供了便捷 ...

  4. java中static、this、super、final用途、用法及实例

    一.static 请先看下面这段程序: public class Hello { public static void main(String[] args){ //(1) System.out.pr ...

  5. Attributes.Add用途与用法

    Attributes.Add("javascript事件","javascript语句"); 如: this.TextBox1.Attributes.add(& ...

  6. elasticsearch配置文件中http.cors.x字段有哪些用途和用法

    http.cors.enabled 是否支持跨域,默认为false http.cors.allow-origin 当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使 ...

  7. W5200移植W5500驱动教程

    说明,移植例程为我按照这个教程移植的例程,测试通过.工程模板为我经常使用的一个w5500模板,可以在里面直接添加文件编程.1. 将driver文件夹中W5500文件夹和所有.c文件复制到工程/sour ...

  8. ASP.NET Core MVC 模型绑定用法及原理

    前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...

  9. window中findstr命令的用法

    http://www.netingcn.com/window-findstr-command.html findstr是window系统自带的命令,用途是查找指定的一个或多个文件文件中包含(或通过参数 ...

随机推荐

  1. Python实例1

    1.有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 错解: 正解: 源码: #!/usr/bin/python for i in range(1,5): for j in ...

  2. Oracle----Job

    最近需要使用到Oracle的定时Job,感觉到学习能力很重要,同时也感觉到及时总结和记笔记也很重要,现在开始总结Job的使用

  3. iOS开发常见错误解决方法

    1.出现下面的错误: StoryboardApp[8593:207] Failed to instantiate the default view controller for UIMainStory ...

  4. MySql 的常用优化

    1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...

  5. [原创]cocos2d-x研习录-第三阶 特性之粒子系统

    我想接触过游戏引擎的同学,对粒子系统应该不会陌生.它用于解决由大量按一定规则运动(变化)的微小物质在计算机上的生成和显示问题.粒子系统在游戏中有着非常广泛的应用,可以模拟很多现象,如火花.爆炸.烟雾. ...

  6. js 循环切换图片

    function changeLot(){ var minIndex = 1; var maxIndex = 100; var curIndex = 10; var src = $("ul ...

  7. VBS 获取当前进程 ID

    Function CurrProcessId Dim oShell, sCmd, oWMI, oChldPrcs, oCols, lOut lOut = Set oShell = CreateObje ...

  8. mysql操作记录

    use mysql;select host,user,password from user; grant all privileges on *.* to root@'%' identified by ...

  9. Tuxedo 超时时间控制(转贴)

    以下是转贴: TUXEDO超时控制全功略 摘要: 本<功略>集中了TUXEDO应用中,可能涉及到的所有时间参数,并分别对其进行详细描述,不但对其出处.取值等基本属性进行查证,而且,通过分析 ...

  10. visual studio 调试时遇到 System.BadImageFormatException

    System.BadImageFormatException”类型的未经处理的异常在 未知模块. 中发生 其他信息: 未能加载文件或程序集“SendYourIP.exe”或它的某一个依赖项.生成此程序 ...