esp8266 作为 tcp server,客户端连接后再断开,这样反反复复多次,第6次就再也连不上了

原创 2017年11月29日 19:22:14
  • 按照esp8266官方提供的tcp server示例代码ESP8266 as TCP server,在ESP8266 RTOS SDK 1.5版本上测试,发现同一个客户端,连续连接断开,再连接再断开,这样反反复复5次,在第6次的时候,就再也连不上了,显示服务器拒绝连接。

  • 使用的客户端是电脑端的tcp test tools,直接连接192.168.4.1监听的端口。

后来分析了SDK底层的espconn.c、espconn_tcp.c和tcp.c代码,才发现问题所在,原来是调用espconn_accept之前没有调用espconn_init导致的,官方示例代码里面根本没有调用espconn_init,如果不调用,就没办法创建EspMbox消息队列,所以后面就没办法使用os_post给其发送消息,所以即使客户端断开连接了,server仍然无法释放资源!!!

void ICACHE_FLASH_ATTR espconn_init(void)
{
    if (sys_mbox_new(&EspMbox, ESPCONN_MBOX_SIZE) != ERR_OK) {
        LWIP_ASSERT("failed to create espconn_thread mbox", 0);
    }

#if ESPCONN_LOCKING

    if (sys_mutex_new(&lock_espconn_task) != ERR_OK) {
        LWIP_ASSERT("failed to create lock_espconn_task", 0);
    }

#endif /* ESPCONN_LOCKING */

    sys_mutex_new(&EspMsgMutex);

    if (EspMsgMutex == NULL) {
        printf("EspMsgMutex create fail\n");
    } else {
        printf("EspMsgMutex created\n");
    }

    sys_thread_new(ESPCONN_THREAD_NAME, espconn_thread, NULL, ESPCONN_THREAD_STACKSIZE, ESPCONN_THREAD_PRIO);
}
#

结论:

其实不调用espconn_init的话,tcp server也能工作,不是说不能监听端口、收发数据,只是client连续多次断开连接就会出现上述问题,但是网上很多小白,谁闲着没事干,连接断开再连接再断开呢?都是客户端连接一次能连上,后面就再也不管了,能用就行,不能用了再重启一下esp8266就完事了。

版权声明:谁想转载随便转载吧,反正多写这一句“未经允许不得转载” 然并卵!!!

[ESP8266]--开启服务器模式和客户端模式

这两天突然心血来潮想搞下ESP8266,正好之前用蓝牙传输数据的方式宣告失败,直接换WIFI,那么问题来了,这玩意怎么开始呢?下面就让我们一步一步的开启Wifi数据传输之旅。Step 1:最小系统启动...

ESP8266--学习笔记(五)TCP通信--TCP-Server

TCP Server模式 ESP8266 工作在station模式下,需确认ESP8266已经分配到IP地址,在启用server侦听 ESP8266 工作在Soft-AP 模式下,可以直接启动serv...

ESP8266学习笔记6:ESP8266规范wifi连接操作

几周前,有网友就问我esp8266重新上电无法自动连接之前配置的路由器。这确实是目前DEMO最缺的一个功能,当首次将设备接入wifi之后,设备应该保存住SSID和PWD,在后续上电时能自己去连接wif...
  • zddxmu
  • zddxmu
  • 2015年08月21日 12:09
  • 14014

ESP8266--学习笔记(四)TCP通信--TCP-Client

TCP Client模式 ESP8266工作在station模式下,需确认ESP8266已经连接AP(路由器)并分配到IP地址,启用client连接 ESP8266工作在soft-AP模式下,需确认连...

Esp8266学习之旅⑧ 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。(带Demo)

本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。①、 Esp8266之 搭建开发环境,开始一个“hellow worl...

ESP8266搭建MQTT客户端源码

  • 2016年11月20日 15:59
  • 6.77MB
  • 下载

ESP8266安卓客户端

  • 2016年02月21日 12:35
  • 260KB
  • 下载

WIFI模块ESP8266的使用指南(客户端和服务器两种模式建立)

 本文主要对讲述ESP8266模块硬件连接工作,以及作为服务器和客户端情况下的配置实现的详细过程,并对相关AT指令和实验现象进行说明。 1. 硬件准备 模块型号使用的是ESP-12E,基...

ESP8266的MQTT客户端搭建教程(基于NONS_SDK_v2.0)

前言 MQTT是IBM开发的一个即时通讯协议,面向M2M和物联网的连接,采用轻量级发布和订阅消息传输机制,并且有可能成为物联网的重要组成部分。 ESP8266是一款物美价廉的Wi-Fi芯片...

WIFI模块ESP8266的使用指南(客户端和服务器两种模式建立)

本文主要对讲述ESP8266模块硬件连接工作,以及作为服务器和客户端情况下的配置实现的详细过程,并对相关AT指令和实验现象进行说明。1. 硬件准备模块型号使用的是ESP-12E,基于ESP8266核...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:esp8266 作为 tcp server,客户端连接后再断开,这样反反复复多次,第6次就再也连不上了
举报原因:
原因补充:

(最多只允许输入30个字)