1、整体流程

  • ESP8266设置成AP模式,笔记本连上此WLAN;
  • 作为TCP服务器端,配置好本地端口8266,等待客户端建立TCP连接(并设置60s keep alive);
  • 侦听到客户端发来的TCP连接建立请求,如果能够成功建立TCP连接,则进入等待数据的阶段;
  • 收到TCP数据,向客户端发送响应;
  • 如果60s之内没有收到TCP数据,则主动断开TCP连接;
  • 后续客户端仍可以重新建立TCP连接;

2、配置TCP通信

  • 配置struct espconn:TCP协议,设置本地端口8266;
  • 建立TCP连接后的回调函数;(发送、接收数据报的回调、TCP正常断开的回调)
  • TCP异常断开后的回调函数;(打印异常断开的原因)
  • espconn_accept 建立TCP连接侦听;
  • 建立连接后60内没有数据,自动断开TCP连接;
//初始化TCP通信,端口8266;
void ICACHE_FLASH_ATTR TCP_port8266_init()
{ST_NetCon.type = ESPCONN_TCP;                         //通信协议:TCPST_NetCon.proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));// 申请内存ST_NetCon.proto.tcp->local_port  = 8266 ;                  // 设置本地端口espconn_regist_connectcb(&ST_NetCon,TCP_connect_callback); //建立TCP连接后回调espconn_regist_reconcb(&ST_NetCon,TCP_reconncect_callback); //TCP异常断开连接espconn_accept(&ST_NetCon);                              //初始化TCP通信//espconn_regist_time在espconn_accept之后调用espconn_regist_time(&ST_NetCon,60,0);                 //60s没收到数据,断开连接}

  • 建立TCP连接后的回调函数
  • 发送、接收数据报的回调函数
  • TCP正常断开的回调函数
//建立了TCP连接,设置发送、接收数据回调、断开连接回调
void ICACHE_FLASH_ATTR TCP_connect_callback(void *arg)
{os_printf("TCP connect.\n");espconn_regist_sentcb((struct espconn*)(arg),TCP_send_callback); // 注册网络数据发送成功的回调函数espconn_regist_recvcb((struct espconn*)(arg),TCP_recv_callback);  // 注册网络数据接收成功的回调函数espconn_regist_disconcb((struct espconn*)(arg),TCP_discon_callback);  //TCP连接正常,断开连接的回调函数
}//正常断开TCP连接
void ICACHE_FLASH_ATTR TCP_discon_callback()
{os_printf("TCP normal disconnect\n");
}void ICACHE_FLASH_ATTR TCP_send_callback(void *arg)
{os_printf("TCP seriver send over\n");
}//作为服务器收到客户端TCP报文的回调函数
void ICACHE_FLASH_ATTR TCP_recv_callback(void * arg, char * pdata, unsigned short len)
{struct espconn * T_arg = arg;                     // 缓存网络连接结构体指针os_printf("\nESP8266_Receive_Data = %s\n",pdata);  // 串口打印接收到的数据// 向对方发送应答espconn_send(T_arg,"ESP8266_TCP_Recv_OK",os_strlen("ESP8266_TCP_Recv_OK"));}

TCP异常断开的回调函数

//异常断开TCP连接
void ICACHE_FLASH_ATTR TCP_reconncect_callback(void *arg,sint8 er)
{switch(er){        //输出下TCP异常断开的原因case ESPCONN_TIMEOUT:    os_printf("ESPCONN_TIMEOUT\n");   break;      //超时case ESPCONN_ABRT:      os_printf("ESPCONN_ABRT\n");  break;      //TCP连接异常case ESPCONN_RST:      os_printf("ESPCONN_RST\n");       break;      //连接复位断开case ESPCONN_CLSD:      os_printf("ESPCONN_CLSD\n");  break;      //TCP 连接在断开过程中出错,异常断开case ESPCONN_CONN:      os_printf(" ESPCONN_CONN\n"); break;      //TCP未连接成功default:              os_printf("else tcp error\n");    break;}
}

3、下载、验证

4、ESP8266作为客户端

ESP8266作为客户端,要给出服务器的IP和端口,并调用espconn_connect 主动与其建立连接;

//初始化TCP通信,端口8266;
void ICACHE_FLASH_ATTR TCP_port8266_init()
{ST_NetCon.type = ESPCONN_TCP;                         //通信协议:TCPST_NetCon.proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));  // 申请内存//ST_NetCon.proto.udp->local_port  = espconn_port(); //获取8266可用端口,这是动态的端口ST_NetCon.proto.tcp->local_port  = 8266 ;                // 设置本地端口ST_NetCon.proto.tcp->remote_ip[0] = 192;ST_NetCon.proto.tcp->remote_ip[1] = 168;ST_NetCon.proto.tcp->remote_ip[2] = 4;ST_NetCon.proto.tcp->remote_ip[3] = 2;ST_NetCon.proto.tcp->remote_port = 6666;espconn_regist_connectcb(&ST_NetCon,TCP_connect_callback); //建立TCP连接后回调espconn_regist_reconcb(&ST_NetCon,TCP_reconncect_callback); //TCP异常断开连接//ESP8266作为客户端,是向服务器申请TCP连接espconn_connect(&ST_NetCon);
}

ESP8266_AP模式、TCP连接相关推荐

  1. ESP8266 wifi模块连接上了热点之后 与服务器建立了tcp连接并进入了透传模式,如果关掉热点wifi模块的tcp连接没有切断,为什么

    ESP8266 wifi模块连接上了热点之后 与服务器建立了tcp连接并进入了透传模式,如果关掉热点wifi模块的tcp连接没有切断,为什么? 这个是很多开发者在第一次使用ESP8266模块是会出现的 ...

  2. linux send 失败_linux高性能网络编程之tcp连接的内存使用

    当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣.socket编程方法提供了SO_SNDBUF.SO_RCVBUF这样的接口来设置连接的读写缓存,li ...

  3. 查看 并发请求数及其TCP连接状态

    服务器上的一些统计数据: 1)统计80端口连接数 netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数 ps -ef|grep httpd| ...

  4. TCP 连接断连问题剖析

    在官方的正式文档中,TCP/IP 协议簇也称为国际互联网协议簇.TCP/IP 协议簇是目前使用最为广泛的全球互联网技术,其分层结构如图 1 所示: 图 1. TCP/IP 协议簇分层结构  如图 1 ...

  5. 快速穷举TCP连接欺骗攻击-利用SYN Cookies

    摘要   TCP 利用 32比特的 Seq/Ack 序列号来确认每一个连接的可靠性. 此外, 这些32位的序列号还能保证服务器不会被会话劫持,伪造一个服务器发出的初始序列号(ISN) 是个难以实现的技 ...

  6. tcp连接探测Keepalive和心跳包

    采用TCP连接的C/S模式软件,连接的双方在连接空闲状态时,如果任意一方意外崩溃.当机.网线断开或路由器故障,另一方无法得知TCP连接已经失效,除非继续在此连接上发送数据导致错误返回.很多时候,这不是 ...

  7. wireshark抓包分析tcp连接与断开

    其实对于网络通信的学习,最好还是能够自己抓到包详细地看一下,不然只单单通过文字和图的描述印象不够深刻.本文通过实际的抓包操作来看一下tcp的连接与断开是怎样的. 首先需要去https://www.wi ...

  8. vc socket api建立TCP连接(包括域名解析)并收发数据的代码模板

    VC和服务器建立TCP连接不像VB的winsock那样两三行代码就能搞定.虽然VC得MFC类库中也有CSocket.CAsyncSocket这样的类,但是这些类的毛病太多,还是返璞归真用socket ...

  9. 基于单TCP连接的高吞吐模型设计

    对于服务与服务之间往往需要高效的吞吐的信息交互,但在绝大部分服务应用中为了实现高吞吐交互都是基于连接池模式,即通过多个TCP连接来提高吞吐量,这种设计完全是通过增加IO的读写量来实现高效吞吐. 如果能 ...

最新文章

  1. mysql消重统计_mysql sql查询如何实现发私信用户和其他用户的列表?要求消重所有重复的用户结果 - 贪吃蛇学院-专业IT技术平台...
  2. 职校电子计算机专业高考分数线,2015年重庆高考分数线公布:一本文572理573
  3. CentOS 下安装
  4. 流媒体数据代理----Anychat
  5. 6年前的Dubbo,2年前的Spring Cloud,都被这个架构干掉了!
  6. react16-reactDom.render流程分析
  7. android gps导航省电,具有省电功能的gps导航系统及其省电方法
  8. 【JAVA】虚拟机指令集
  9. 驱动人生6网卡版 v6.1.19.90 官方版
  10. nb-iot信号测试软件,NB-IOT测试仪
  11. 4. gstimxv4l2src.c源码分析
  12. 【Alpha】第四次Daily Scrum Meeting
  13. 随着年龄增长,我应该怎样对抗肌肉流失?
  14. 续费Enom域名的三种办法
  15. 用英语详细介绍计算机系统的组成,第二节 计算机的基本组成及工作原理(国外英语资料).doc...
  16. ps4 优酷 html5,ps4-hen-vtx/index.html at master · xvortex/ps4-hen-vtx · GitHub
  17. 体系结构13_Tomasulo算法
  18. 2022图书出版行业营销白皮书-巨量引擎
  19. OpenGL绘制框架(Win32版)
  20. linux 扫描wifi

热门文章

  1. JavaScript优雅的跳转,作弊跳转方式,JS防检测跳转。
  2. 有哪款戴尔笔记本适合学计算机专业,学生用笔记本哪款好? 2018适合大学生用的笔记本...
  3. oracle metadata .getcolumns,通过DatabaseMetaData从Oracle中获取字段的注释
  4. IJ的Tomcat环境配置
  5. 无双无名之辈--电影资源分享
  6. 微信小程序生成带动态参数二维码
  7. [转载] 七龙珠第一部——第102话 克林之死
  8. [南帝北丐]快速升级20级全攻略
  9. 华为android提醒怎么关,华为荣耀7i未读信息提醒指示灯该怎么关闭
  10. MySQL MGR架构