WIFI技术学习
直播中

李悠冉

7年用户 252经验值
私信 关注
[问答]

WIFI模块ESP8266主程序一直给服务器上传数据

用到该模块做的一个板子,给服务器上传数据。上位机用助手建立一个TCP服务器,板子先配置好后,主程序就一直给服务器上传数据(上传成功后没有反馈啊)
如果某种原因,服务器关掉一段时间后重启。那么做的板子(带ESP8266)还能给服务器上传数据吗?做的板子一直给着电的,而且也是在主程序中跑的。
如果在服务器停掉的时间段,板子给服务器上传数据不成功的话,有反馈吗??怎么判断上传数据不成功呢?

回帖(2)

汪佳丽

2019-4-16 10:32:56
TCP连接成功/失败,是有返回值的。你根据这个做好重连机制,就行了。
举报

张琳

2019-4-16 10:49:02
这得看你的上位机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机制,提高对链接实际断开的实时监控。
供参考!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分