ESP8266_AP模式、TCP连接
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连接相关推荐
- ESP8266 wifi模块连接上了热点之后 与服务器建立了tcp连接并进入了透传模式,如果关掉热点wifi模块的tcp连接没有切断,为什么
ESP8266 wifi模块连接上了热点之后 与服务器建立了tcp连接并进入了透传模式,如果关掉热点wifi模块的tcp连接没有切断,为什么? 这个是很多开发者在第一次使用ESP8266模块是会出现的 ...
- linux send 失败_linux高性能网络编程之tcp连接的内存使用
当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣.socket编程方法提供了SO_SNDBUF.SO_RCVBUF这样的接口来设置连接的读写缓存,li ...
- 查看 并发请求数及其TCP连接状态
服务器上的一些统计数据: 1)统计80端口连接数 netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数 ps -ef|grep httpd| ...
- TCP 连接断连问题剖析
在官方的正式文档中,TCP/IP 协议簇也称为国际互联网协议簇.TCP/IP 协议簇是目前使用最为广泛的全球互联网技术,其分层结构如图 1 所示: 图 1. TCP/IP 协议簇分层结构 如图 1 ...
- 快速穷举TCP连接欺骗攻击-利用SYN Cookies
摘要 TCP 利用 32比特的 Seq/Ack 序列号来确认每一个连接的可靠性. 此外, 这些32位的序列号还能保证服务器不会被会话劫持,伪造一个服务器发出的初始序列号(ISN) 是个难以实现的技 ...
- tcp连接探测Keepalive和心跳包
采用TCP连接的C/S模式软件,连接的双方在连接空闲状态时,如果任意一方意外崩溃.当机.网线断开或路由器故障,另一方无法得知TCP连接已经失效,除非继续在此连接上发送数据导致错误返回.很多时候,这不是 ...
- wireshark抓包分析tcp连接与断开
其实对于网络通信的学习,最好还是能够自己抓到包详细地看一下,不然只单单通过文字和图的描述印象不够深刻.本文通过实际的抓包操作来看一下tcp的连接与断开是怎样的. 首先需要去https://www.wi ...
- vc socket api建立TCP连接(包括域名解析)并收发数据的代码模板
VC和服务器建立TCP连接不像VB的winsock那样两三行代码就能搞定.虽然VC得MFC类库中也有CSocket.CAsyncSocket这样的类,但是这些类的毛病太多,还是返璞归真用socket ...
- 基于单TCP连接的高吞吐模型设计
对于服务与服务之间往往需要高效的吞吐的信息交互,但在绝大部分服务应用中为了实现高吞吐交互都是基于连接池模式,即通过多个TCP连接来提高吞吐量,这种设计完全是通过增加IO的读写量来实现高效吞吐. 如果能 ...
最新文章
- mysql消重统计_mysql sql查询如何实现发私信用户和其他用户的列表?要求消重所有重复的用户结果 - 贪吃蛇学院-专业IT技术平台...
- 职校电子计算机专业高考分数线,2015年重庆高考分数线公布:一本文572理573
- CentOS 下安装
- 流媒体数据代理----Anychat
- 6年前的Dubbo,2年前的Spring Cloud,都被这个架构干掉了!
- react16-reactDom.render流程分析
- android gps导航省电,具有省电功能的gps导航系统及其省电方法
- 【JAVA】虚拟机指令集
- 驱动人生6网卡版 v6.1.19.90 官方版
- nb-iot信号测试软件,NB-IOT测试仪
- 4. gstimxv4l2src.c源码分析
- 【Alpha】第四次Daily Scrum Meeting
- 随着年龄增长,我应该怎样对抗肌肉流失?
- 续费Enom域名的三种办法
- 用英语详细介绍计算机系统的组成,第二节 计算机的基本组成及工作原理(国外英语资料).doc...
- ps4 优酷 html5,ps4-hen-vtx/index.html at master · xvortex/ps4-hen-vtx · GitHub
- 体系结构13_Tomasulo算法
- 2022图书出版行业营销白皮书-巨量引擎
- OpenGL绘制框架(Win32版)
- linux 扫描wifi
热门文章
- JavaScript优雅的跳转,作弊跳转方式,JS防检测跳转。
- 有哪款戴尔笔记本适合学计算机专业,学生用笔记本哪款好? 2018适合大学生用的笔记本...
- oracle metadata .getcolumns,通过DatabaseMetaData从Oracle中获取字段的注释
- IJ的Tomcat环境配置
- 无双无名之辈--电影资源分享
- 微信小程序生成带动态参数二维码
- [转载] 七龙珠第一部——第102话 克林之死
- [南帝北丐]快速升级20级全攻略
- 华为android提醒怎么关,华为荣耀7i未读信息提醒指示灯该怎么关闭
- MySQL MGR架构