IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> ESP8266_AP模式、TCP连接 -> 正文阅读

[系统运维]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;					        //通信协议:TCP

	ST_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;						    //通信协议:TCP

	ST_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);
}

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:35:01  更:2022-05-24 18:36:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:39:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码