金牌会员
- 积分
- 2014
- 金钱
- 2014
- 注册时间
- 2016-12-27
- 在线时间
- 136 小时
|
发表于 2017-12-28 10:38:50
|
显示全部楼层
这得看你的上位机TCP服务器重启时的处理机制。
(1) 如果你的上位机TCP服务器在关闭重启时,服务器后台会先主动切断TCP Client的套接字链接(正如你在调试助手里点击“断开”按钮那样,当你点击断开时,调试助手的后台)会给TCP客户端发送一个“断开”链接的通知。这个时候,TCP客户端(在你的例子里也就是ESP8266模组)就会监控到TCP链接被断开了,此时,如果你继续去发送,就会立刻报告链接断开之类的错误。
(2)如果你的上位机TCP服务器在重启时,比如异常重启,一般就不会(或者说来不及)向TCP客户端发送断开的通知。此时,虽然TCP服务器关机或复位了,但是TCP客户端这边是并不会知道该链接已经断开了的,此时如果你继续去请求ESP8266作为TCP客户端发送数据,TCP客户端依然会去发送,只是此时得不到ACK就会返回超时错误。或者一段时间超时后,看你的TCP客户端的处理机制,有可能会因为超时自动断开(删除)这个套接字,此时,你再去发送时才会返回被断开的错误。
因此,作为TCP服务器,为了确保及时地或许客户端已经断开(包括异常的情形),一般在TCP服务器端设置一个自动断开的超时时间,ESP8266作为TCP服务器时,支持这个超时参数的设置,如果不设置,就会很长,对于客户端的异常断开,不会准“实时的”监控到。
而作为TCP客户端(你这里的具体例子),如果你想让客户端及时的监控到服务器已经异常,可以启用Keep-Alive机制,提高对链接实际断开的实时监控。
供参考! |
|