大家是否遇到过这种问题,W5500作为server已经建立连接,突然网线掉了,然后再去连接W5500。就连不上了。

为什么?以下对这个问题进行解释说明,并提出解决的方法。

图1中的上位机程序作为client。连接W5500server。

图2是对这个问题的wireshark抓包说明。当中192.168.11.114为W5500的IP,192.168.11.110为PC的IP。下图中的第48个包是第一次握手:建立连接时,client发送SYN包到server,等待server确认;第49个包为第二次握手:server收到SYN包,必须确认客户的SYN同一时候自己也发送一个SYN包,即SYN+ACK包。第50个包为第三次握手:client收到server的SYN+ACK包,向server发送确认包ACK。此包发送完毕。client和server进入ESTABLISHED状态,完毕三次握手。

在第70个包中显示,PC向W5500发送9个字节数据。在第73个包中。W5500向PC发送9个字节数据。此时,突然拔掉网线,并点击图1
“Disconnect”button。图1中的第160个包显示的是PC发送FIN+ACK包,第161包,W5500发送应答。

然后连上网线。而且点击图3的“connect”,可是无法连接。

这是由于,网线没掉之前,W5500处于SOCK_ESTABLISHED状态。此时突然拔掉网线,SOCKET状态没变。还是SOCK_ESTABLISHED状态。没有监听,所以无法再次连接。

图1 wireshark抓包

图2 上位机建立连接

attachment_id=6381" rel="attachment wp-att-6381" style="margin:0px; padding:0px; border:0px; font-family:inherit; font-size:undefined; font-style:inherit; font-variant:inherit; font-weight:inherit; line-height:inherit; vertical-align:baseline; color:rgb(33,117,155); text-decoration:none">

图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”button,能够又一次建立连接,109-111包是第二次建立连接过程。

attachment_id=6382" rel="attachment wp-att-6382" style="margin:0px; padding:0px; border:0px; font-family:inherit; font-size:undefined; font-style:inherit; font-variant:inherit; font-weight:inherit; line-height:inherit; vertical-align:baseline; color:rgb(33,117,155); text-decoration:none">

图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

如果你有是否有任何问题,。请联系:wiznetbj@wiznet.co.kr

版权声明:本文博主原创文章。博客,未经同意不得转载。

W5500 keep-alive的用途及使用的更多相关文章

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

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

  2. W5500问题集锦(二)

    attachment_id=5620" rel="attachment wp-att-5620" style="margin:0px; padding:0px; ...

  3. 【.net深呼吸】(WCF)OperationContextScope 的用途

    一个WCF服务可以实现多个服务协定(服务协定实为接口),不过,每个终结点只能与一个服务协定关联,并指定调用的唯一地址.那么,binding是干吗的?binding是负责描述通信的协议,以及消息是否加密 ...

  4. Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究

    Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, ...

  5. 【Java之对象清理】finalize()的用途

    Java允许在类中定义一个名为finalize()的方法.它的工作原理是:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法.并且在下一次垃圾回收动作发生时,才会真正回收 ...

  6. STM32F412应用开发笔记之五:结合W5500实现以太网通讯

    因实际使用需求我们测试一下网络通讯,在NUCLEO-F412ZG测试板上没有以太网部分,我们选择外接一个W5500的实验板.W5500支持SPI接口通讯,DC3.3V供源.而NUCLEO-F412ZG ...

  7. Microsoft Visual Studio 文件识别及其用途简述

    Microsoft Visual Studio IDE开发工具集,目前已推出多个不同版本,从之前的VC4.0到现在的VS2015,各个版本都会或多或少的功能或性能上的修改.提升,具体的改进地方可去官网 ...

  8. SQL Server 2012故障转移的looksalive check和is alive check

    什么是looksalive check和is alive check SQL Server故障转移集群是建立在windows集群服务上的一种热备的高可用方案.在集群运行过程中,windows集群服务定 ...

  9. Atitit图像处理的用途

    Atitit图像处理的用途 1.1. 分类识别 (人脸检测,肤色识别,人类检测:1 1.2. 炫丽的动态按钮生成:色相旋转+自己的草书等图片合成,图片自动裁剪1 1.3. 集成调用自绘gui接口:识别 ...

随机推荐

  1. 【MySQL案例】HA: GTID_MODE配置不一致

    1.1.1. HA: GTID_MODE配置不一致 [环境描写叙述] msyql5.6.14 [报错信息] 初始状态Master和Slave都开启了enforce-gtid-consistency和g ...

  2. NET Core 中的依赖注入

    NET Core 中的依赖注入 [共7篇] 一.控制反转(IoC) ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制, ...

  3. Lambda高手之路第二部分

    转http://www.cnblogs.com/lazycoding/archive/2013/01/06/2847579.html 闭包的影响 为了展示闭包的影响,我们看下面这个例子. var bu ...

  4. NYOJ 914 Yougth的最大化

    Yougth的最大化 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 Yougth如今有n个物品的重量和价值各自是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价 ...

  5. 如果在线显示php源代码

    原文:如果在线显示php源代码 通过php提供的函数highlight_file和highlight_string实现

  6. c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

    一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index ...

  7. 第一章. ActionScript 语言基础

    第一章. ActionScript 语言基础 1.0. ActionScript 3.0 Cookbook 概述 1.1. 新建一个 ActionScript project 1.2. 自己定义应用程 ...

  8. jQuery 弹出窗口的形式一直是具体案件的中心

    在网上查 多 不是不符合无效;因此,一些自己总结,解决这个问题   原则: 常见问题: 弹出层居中了,背景也是半透明的  可是发现一拉动滚动栏立即就露馅了发现背景仅仅设置了屏幕所在段,其它部分都是原来 ...

  9. poj1236(强连通缩点)

    传送门:Network of Schools 题意:一些学校联接在一个计算机网络上,学校之间存在软件支援协议,每个学校都有它应支援的学校名单(A学校支援学校B,并不表示B学校一定支援学校A).当某校获 ...

  10. CodeIgniter Apacheserver htaccess SEO重写写法

    1)支持重写 2)兼容全部APACHE server 3)假设不是文件,请求的结尾不包含反斜杠,自己主动跳转到反斜杠 4)文件名称 .htaccess 5)这个放到nginxserver怎么都不支持重 ...