码迷,mamicode.com
首页 > 其他好文 > 详细

W5500 keep-alive的用途与用法--新华龙电子

时间:2014-12-11 11:52:30      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:blog   http   ar   sp   for   on   数据   2014   问题   

  大家是否遇到过这样的问题,W5500作为服务器已经建立连接,突然网线掉了,然后再去连接W5500,就连不上了。为什么?下面对这个问题进行解释说明,并提出解决办法。

  图1中的上位机程序作为客户端,连接W5500服务器。

bubuko.com,布布扣

  图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抓包

bubuko.com,布布扣

  图2 上位机建立连接

bubuko.com,布布扣

  图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后可以重新建立连接

bubuko.com,布布扣

  以上演示的是自动发送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的用途与用法--新华龙电子

标签:blog   http   ar   sp   for   on   数据   2014   问题   

原文地址:http://www.cnblogs.com/w5500/p/4157039.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!