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   !

 

时间: 2024-10-29 19:07:16

W5500 keep-alive的用途与用法--新华龙电子的相关文章

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包,必须确认客

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

拷贝被人的drawRect绘图分类用途,用法很全.留着.供用时参考 // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(

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

2014/12/16 | Filed under: TCP/IP芯片 and tagged with: C8051, W5100, W5500, 新华龙电子, 网络开发板 42 Views 深圳新华龙电子有限公司近日推出了最新的网络开发板(F380-W5500&W5100-DK),集成了以太网专业方案提供商-WIZnet的W5100和W5500.利用全硬件TCP/IP协议栈的优势,从而使得C8051更加便捷,轻松地实现以太网功能.并且使用了W5100/W5500方案,能够大大节省C8051网络方

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

WIZnet 之前已经介绍过W5500EVB 在TCP模式下的两种(Server及Client)数据传输的实现过程,那么传输控制协议中,UDP也是非常常用的,这种无连接的协议在更多场合为用户提供了便捷,比如发电子邮件,QQ聊天发收消息等…好,那今天就学习一下,UDP模式在W5500EVB上的简单实现. 一 实验硬件及其连接 二 UDP实验相关知识 W5500是一款全硬件TCP/IP嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案.W5500集成了TCP/IP协议栈,10/100M以

host文件的用途和用法

一.Hosts文件的位置 很多用户都知道在Window系统中有个Hosts文件(没有后缀名),在Windows 98系统下该文件在Windows文件夹. 在Windows 2000/XP系统中位于 \%Systemroot%\System32\Drivers\Etc 文件夹中,其中,%Systemroot%指系统安装路径.例如,Windows XP 安装在C:\WINDOWS,那么Hosts文件就在C:\Widows\System32\Drvers\Etc中. 你也可以用windows自带的查找

Attributes.Add用途与用法

Attributes.Add("javascript事件","javascript语句"); 如: this.TextBox1.Attributes.add("onblue", "window.Label1.style.backgroundColor='#000000';"); this.TextBox1.Attributes.Add("onblur","this.style.display='n

枚举的意义,用途,作用,用法,作用场景

下面给出在枚举中声明属性和方法的示例: package com.fhp.enumexample; public enum TypeEnum { VIDEO(1), AUDIO(2), TEXT(3), IMAGE(4); int value; TypeEnum(int value) { this.value = value; } public int getValue() { return value; } } 在这个枚举中,每个枚举的值都有一个对应的int型字段,而且不同的枚举值也会有不同的i

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

http.cors.enabled 是否支持跨域,默认为false http.cors.allow-origin 当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式.比如只允许本地地址. /https?:\/\/localhost(:[0-9]+)?/ http.cors.max-age 浏览器发送一个"预检"OPTIONS请求,以确定CORS设置.最大年龄定义多久的结果应该缓存.默认为1728000(20天) http.cors.all

W5200移植W5500驱动教程

说明,移植例程为我按照这个教程移植的例程,测试通过.工程模板为我经常使用的一个w5500模板,可以在里面直接添加文件编程.1. 将driver文件夹中W5500文件夹和所有.c文件复制到工程/source文件夹下,并覆盖原来的文件,删除W5200文件夹 2. 将driver/include文件夹中W5500文件夹和所有.h头文件复制到工程/include文件夹下,并覆盖原来的文件,删除W5200文件夹 3. 打开原来工程文件,删除工程目录/W5200下md5,socket,SPI2,w5200四